黑马程序员——OC语言 其他语法
(以下内容是对黑马苹果入学视频的个人知识点总结)
(一)ARC的判断准则:只要没有强指针指向对象,就会释放对象
1.ARC特点
1> 不允许调用release、retain、retainCount
2> 允许重写dealloc,但是不允许调用[super dealloc]
3> @property的参数
* strong :成员变量是强指针(适用于OC对象类型)
* weak :成员变量是弱指针(适用于OC对象类型)
* assign : 适用于非OC对象类型
4> 以前的retain改为用strong
指针分2种:
1> 强指针:默认情况下,所有的指针都是强指针 __strong
2> 弱指针:__weak
当两端循环引用的时候,解决方案:
1> ARC
1端用strong,另1端用weak
2> 非ARC
1端用retain,另1端用assign
(二)协议的定义
1 @protocol 协议名称 <NSObject> 2 3 // 方法声明列表.... 4 5 @end
2.如何遵守协议
1> 类遵守协议
1 @interface 类名 : 父类名 <协议名称1, 协议名称2> 2 3 @end
2> 协议遵守协议
1 @protocol 协议名称 <其他协议名称1, 其他协议名称2> 2 3 @end
3)协议中方法声明的关键字
1> @required (默认)
要求实现,如果没有实现,会发出警告
2> @optional
不要求实现,怎样不会有警告
4)定义一个变量的时候,限制这个变量保存的对象遵守某个协议
1 类名<协议名称> *变量名; 2 3 id<协议名称> 变量名; 4 5 NSObject<MyProtocol> *obj; 6 7 id<MyProtocol> obj2;
如果没有遵守对应的协议,编译器会警告
5)@property中声明的属性也可用做一个遵守协议的限制
1 @property (nonatomic, strong) 类名<协议名称> *属性名; 2 3 @property (nonatomic, strong) id<协议名称> 属性名; 4 5 @property (nonatomic, strong) Dog<MyProtocol> *dog; 6 7 @property (nonatomic, strong) id<MyProtocol> dog2;
6)协议可用定义在单独.h文件中,也可用定义在某个类中
1> 如果这个协议只用在某个类中,应该把协议定义在该类中
2> 如果这个协议用在很多类中,就应该定义在单独文件中
7)分类可用定义在单独.h和.m文件中,也可用定义在原来类中
1> 一般情况下,都是定义在单独文件
2> 定义在原来类中的分类,只要求能看懂语法
(三)block
1> 如何定义block变量
1 int (^sumBlock)(int, int); 2 3 void (^myBlock)();
2> 如何利用block封装代码
1 ^(int a, int b) { 2 3 return a - b; 4 5 }; 6 7 ^() { 8 9 NSLog(@"----------"); 10 }; 11 12 ^ { 13 14 NSLog(@"----------"); 15 16 };
3> block访问外面变量
* block内部可以访问外面的变量
* 默认情况下,block内部不能修改外面的局部变量
* 给局部变量加上__block关键字,这个局部变量就可以在block内部修改
(四) 利用typedef定义block类型
1 typedef int (^MyBlock)(int, int);
// 以后就可以利用MyBlock这种类型来定义block变量
1 MyBlock block; 2 3 MyBlock b1, b2; 4 5 b1 = ^(int a, int b) { 6 7 return a - b; 8 9 }; 10 11 12 MyBlock b3 = ^(int a, int b) { 13 14 return a - b; 15 16 };