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

时间:2023-02-18 20:47:55

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