在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
Block数据类型 Block封装了一段代码 可以在任何时候执行 Block可以作为函数参数或者函数的返回值 而其本身又可以带输入参数或返回值 苹果官方建议尽量多用Block 在多线程 异步任务 集合遍历 集合排序 动画转场用的很多 定义Block变量 void (^myBlock) (); int (^sunBlock) (int, int); 利用Block封装代码 ^ { NSLog(@"=========="); }; ^() { NSLog(@"========="); }; ^(int a, int b) { return a + b; }; Block访问外面变量 Block 内部可以访问外面的变量 默认情况下 Block内部不能修改外面的局部变量 给局部变量加上__block关键字 这个局部变量就可以在Block内部修改 利用typedef定义Block类型 typedef int (^MyBlock) (int, int); //以后就可以利用MyBlock这种类型来定义Block变量 MyBlock block; MyBlock b1, b2; b1 = ^(int a, int b) { return a + b; }; MyBlock b3 = ^(int a, int b) { return a + b; }; @protocol关键字 可以用来声明一大堆方法 (不能声明成员变量) 只要某个类遵守了这个协议 就相当于拥有这个协议中的所有方法声明 只要父类遵守了某个协议 就相当于子类也遵守了 协议的编写格式 @protocol 协议名称 <NSObject> //方法声明列表 @end 某个类遵守协议 @interface 类名 : 父类 <协议名称1, ...> @end 协议遵守协议 一个协议遵守了另外一个协议 就可以拥有另一个协议的所有方法声明 @protocol 协议名称 <协议名称1, ...> //方法声明列表 @end 协议中方法声明的关键字 @required 要求实现 不实现会有警告 (默认) @optionnal 可选实现 基协议 NSObject是一个基类 任何其他类最终都要继承它 还有一个NSObject基协议 声明了许多最基本的方法 比如 description retain release 等等 建议每一个新的协议都遵守NSObject基协议 定义一个变量时 限制这个变量保存的对象遵守某个协议 类名<协议名称> *变量名; id<协议名称> 变量名; NSObject<MyProtocol> *obj = [[NSObject alloc] init]; @property (nonatomic, strong) id<MyProtocol> obj; 如果没有遵守对应的协议 编译器就会报错 |
请发表评论