黑马程序员——OC语言 其他语法

                        Java培训、Android培训、iOS培训、.Net培训、期待与您交流!                                                     

                                                          (以下内容是对黑马苹果入学视频的个人知识点总结)

 (一)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(@"");
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  };

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。