Objective-C中class、Category、Block的介绍
@class
当定义一个类,必须为编译器提供两组消息,第一组(接口部分.h):构建类的实例的一个基本蓝图。必须指定类名,类的超类,类的实例变量和类型的列表,最后是类的方法的声明。第二组(实现部分.m):实现类的方法的代码。
例如: ------------------------------ RockStar.h -------------------------------------------
#import<Foundation/Foundation.h>//?用#import呢,原因RockStar继承NSObject类,需要知道NSObject的方法属性等,所以用#import。
@class Banid;//这里为什么没用#import “Banid”,导入包是把所有的信息导入,这个效率比较低,而@class只是说明Banid是一个类,在实现部分在导入包(import),效率高
@interface RockStar:NSObjtect
@end
-------------------------------- RockStar.m------------------------------------------------------------
#import ”RockStar.h”
#import “Banid.h”
@implementation RockStar
@end
Category分类有三个使用场景:定义一个类时某些情况系(需求变更),需要添加新的方法2、团队合作方法的实现3、对基础类库中的方法的扩充,例如NSString+JSON.h为NSString这个类拓展一些解析JSON的方法
@interface Student(Text)//这是一个分类,是对Student类的拓展,对Stduent方法属性等的补充。
@end
Protocal(协议说就是一系列方法的列表,其中声明的方法可以被任何类实现,这种模式一般称为代理(delegation0式,相当于java中的接口,但是协议中的方法可以部分实现,不需要全部
------------------------------TabelPrinter.h-----------------
@protocal TablePrintDataSource
@required//必需的,默认是必须的,也就是使用的类必须实现所有的方法(但也不强求也就是说你不实现编译器也可以通过,再次强调OC是一种弱语言)
-(NSString*)stringForRowAtIndex: (int)index;
-(int) numberOfRowsInTable;
@optionl//可选的
-(NSString*) tableTitle;
-(BOOL) printLineNumber;
@end
@interface TablePrinter:NSObject
@property(nonatomic,assign)id<TablePrintDataSource> datasource;//这里弱引
-(void)printable;
@end
在另一个类中使用时在.h中添加@protocal TablePrintDataSource ;在.m中添加
#import “Table”
或者协议可以单独写出来:项目中有,别的地方用时在.h中添加@protocal TablePrintDataSource ;在.m中添加#import“TablePrintDataSource.h”
Block
Block可以访问外面定义的变量,__block int c=20,这样可以外部写该外部变量,否则不可以修改,只可以使用
例子1、
int j=10;
int (^blockPtr)(int)=^(int n){return j+n}; //带一个参数返回值为int的块,块是基于栈的,块与自动变量拥有相同的生命周期。(^)脱字符
j=20;
int k=blockPtr(5);//k is 15,not 25
例子2、
Void someFunction(int (^blockArg)(int));
Int (^doubler) (int)=^(int n){return n*2};
someFunction(doubler);
例子3、
void someFunction(int (^blockArg)(int));
someFunction(^(int n){ return n*2;});
例子4、
Void text()
{
Typedef int (^Sum)(int,int);
Sum sum=^(int a,int b){return a+b;};
Objective-C中class、Category、Block的介绍的更多相关文章
- iOS 阶段学习第24天笔记(Block的介绍)
iOS学习(OC语言)知识点整理 一.Block 的介绍 1)概念: block 是一种数据类型,类似于C语言中没有名字的函数,可以接收参数,也可以返回值与C函数一样被调用 封装一段代码 可以在任何地 ...
- iOS沙盒机制介绍,Block 的介绍
一.iOS沙盒机制介绍 (转载) 1)概念:每个ios应用都有自己的应用沙盒,应用沙盒就是文件系统目录,与其他应用放入文件 系统隔离,ios系统不允许访问 其他应用的应用沙盒,但在ios8中已经开放访 ...
- SQLSERVER中的log block校验(译)
原文:SQLSERVER中的log block校验(译) SQLSERVER中的log block校验(译) 来自:http://sankarreddy.com/2010/03/transaction ...
- HTML5中<template>标签的详细介绍
HTML5中<template>标签的详细介绍(图文) 这篇文章主要介绍了HTML5中的template标签,是HTML5入门中的重要知识,需要的朋友可以参考 一.HTML5 templa ...
- meta标签中的http-equiv属性使用介绍(转载)
meta是html语言head区的一个辅助性标签.也许你认为这些代码可有可无.其实如果你能够用好meta标签,会给你带来意想不到的效果,meta标签的作用有:搜索引擎优化(SEO),定义页面使用语言, ...
- jQuery中$.fn的用法示例介绍
$.fn是指jquery的命名空间,加上fn上的方法及属性,会对jquery实例每一个有效,下面有个不错的示例,喜欢的朋友可以参考下 如扩展$.fn.abc(),即$.fn.abc()是对jquery ...
- 【转】javascript 中that的含义示例介绍
var that = this;,这代表什么意思呢?this代表的是当前对象,var that=this就是将当前的this对象复制一份到that变量中,下面为大家介绍这样做有什么意义 你可能会发现别 ...
- 理解Objective C 中id
什么是id,与void *的区别 id在Objective C中是一个类型,一个complier所认可的Objective C类型,跟void *是不一样的,比如一个 id userName, 和vo ...
- 浅谈Objective—C中的面向对象特性
Objective-C世界中的面向对象程序设计 面向对象称程序设计可能是现在最常用的程序设计模式.如何开发实际的程序是存在两个派系的-- 面向对象语言--在过去的几十年中,很多的面向对象语言被发明出来 ...
- SSH框架应用中常用Jar包用途介绍
struts2需要的几个jar包:1)xwork-core-2.1.62)struts2-core-2.1.83)ognl-2.7.34)freemarker-2.3.155)commons-io-1 ...
随机推荐
- 小白日记19:kali渗透测试之选择和修改EXP
EXP 目的:学会选择和修改网上公开的漏洞利用代码[EXP(python\perl\ruby\c\c++....)] 方法: 1.Exploit-db[kali官方维护的漏洞利用代码库] 2.Secu ...
- Balanced Lineup(最简单的线段树题目)
Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 33389 Accepted: 15665 Case Time Limit ...
- Direct3D11-1 初始化
在使用一个东西之前,我们需要初始化他,好比汽车加油,手机充电.于是我们采取平时的编码习惯,试图写下如下代码 Direct3D11 _direct3d11; 事实上,我们 ...
- android scrollview主要的问题
项目做多了之后,会发现其实 ScrollView嵌套ListVew或者GridView等很常用,但是你也会发现各种奇怪问题产生.根据个人经验现在列出常见问题以及代码最少最简单的解决方法. 问题一 : ...
- 【安卓面试题】在一个Activity启动另一个Activity和在Service中启动一个Activity有什么区别
在Activity中可以直接使用Intent启动另一个Activity 显式Intent intent = new Intent(context, activity.class) 隐式 Intent ...
- div容器内文本对齐--神奇的css
有时候使用一些css往往能达到意想不到的效果 最近需要在页面上显示读取的文本内容,中英文混杂着,我把它们统统抛到div中div设置了宽度,效果是相当糟糕,左对齐,右端长短不一,有的超出长度,有的不够长 ...
- javascript一些常用操作
一:验证日期 1:日期必须满足yyyy-MM-dd格式 2:日期必须是合法的日期,如2016-02-30就是不存在 //验证就诊日期 function checkVisitDate(date){ va ...
- [未完成][Mooc]关于Linxu的总结(一)
视频1:Linux之前有个Minix(这个是一个教授用来教学用的)开源的,不是编译过的,不能通过QQ.exe找到其源码.后来Linus这个家伙搞了一个Linux.服务器领域超过百分之八十.linux是 ...
- HTML+CSS总结/有关于web标准的总结
关于这一话题,我认为我们需要解决的问题有:什么是web标准?定义web标准的目的?遵循web标准的好处? 一.百度百科对web标准的解释: WEB标准不是某一个标准,而是一系列标准的集合. 网页的主要 ...
- Nginx - Additional Modules, Website Access and Logging
The following set of modules allows you to configure how visitors access your website and the way yo ...