----------------------
ASP.Net+Unity开发
、
.Net培训
、期待与您交流! ----------------------
先说一下block的基本概念
----------------------
ASP.Net+Unity开发
、
.Net培训
、期待与您交流! ---------------------- 详细请查看:
www.itheima.com
block
比较官方的解释:
Block 是一种具有匿名功能的内嵌函数
block看上去很像函数,可以保存一段代码,并且可以被调用
block跟函数的区别在于:block在可以在运行时保存一段代码,提供给其他对象进行调用
而函数在编译前就被定义好了,无法在运行时保存代码
什么时候使用block:
Block 一般是用来表示、简化一小段的程式码,它特别适合用来建立一些同步执行的程式片段、封装一些小型的工作或是用来做为某一个工作完成时的回传呼叫(callback)。
我的理解block有2点作用或者说优势:
1.block可以作为函数参数进行传递
2.可以直接在程式码中撰写等会要接着执行的程式(也是跟函数的区别)
block的定义:
int (^MyBlock) (int int ) = ^(int a,int b){
return a + b;
};
可以使用typedef 给block定义一个别名,例如:
typedef int (^MyBlock) (int int ) ;
那么MyBlock就是 int (^MyBlock) (int int ) 的别名
那么定义一个block变量就可以按照如下方式:
MyBlock b1, b2;
MyBlock b3=^(int a,int b){
return a + b;
};
block的调用方式跟函数一样:
MyBlock(10,20);
注意点:
1.block内部可以访问外面的变量
2.默认情况下,block内部不能修改外面的局部变量
3.给局部变量加上__block关键字,那么该局部变量就可以在block中被修改,例如__block int a;
protocol
protocol的基本概念
通俗的说,协议就是方法的声明,而且是声明其他类中的方法,感觉有点像类的继承
protocol的作用和使用场合
由于OC中不能多重继承,因此protocol可以很好的解决这个缺点,通过使用protocol来声明其他类的方法,达到多重继承的目的
protocol的定义:
@protocol 协议名称 <NSObject>
方法列表...
@end
protocol的作用:
只要一个类遵守了一个协议,就拥有该协议中的所有方法声明
如何遵守协议:
1.类遵守协议
@interface 类名 : 父类名 <协议名1, 协议名称2>
@end
注意:协议可以遵守多个
2.协议遵守协议
@protocol 协议名称 <其他协议名称1,其他协议名称2>
@end
协议中的关键字及其作用
1. required (默认)
要求必须实现协议中的方法,不然编译器会发出警告
2.optional
可选的方法,不需要必须实现
例如:
@protocol OneProtocol <NSObject>
@optional
//可以选择实现的方法:
-(void) optionalMethod1;
-(void) optionalMethod2;
@required
-(void) requiredMethod1;
//
必须实现的方法:
我们可以在定义变量的时候限制这个变量保存的对象必须遵守某个协议,方法如下:
类名<协议名> * 变量名;
例如:
NSObject<MyProtocol> obj1;
id<MyProtocol> obj2;
如果没有遵守对应的协议,编译器会警告
@property中声明的变量也可以做一个遵守协议的限制,方法如下:
@property (nonatomic , ratain) 类名<协议名称> *变量名
@property (nonatomic , ratain) Person<MyProtocol> *p1;
注意:协议可以定义在单独文件中,也可以定义在.m文件中
1、如果这个协议只用在某个类中,应该把协议定义在该类中
2、如果这个协议会被很多类遵守,应该定义在单独的.h文件中
另外:分类也可以定义在单独.h文件中和.m文件中
1、分类一般情况下都是定义在单独文件中
2、很少定义在原来的类中