黑马程序员_object c学习日记⑤_ARC、强指针、block、协议

来源:互联网 发布:域名注册成功如何备案 编辑:程序博客网 时间:2024/06/05 03:50

-------------------------------------- android培训java培训、ios培训期待与您交流! ---------------------------------

ARC判断准则:只要没有强指针指向对象,就会释放对象

1、        ARC特点:

1>  不允许调用release、retain、retaincount

2>  允许重写dealloc,但是不允许调用[super dealloc]

3>  @property的参数

l  strong:成员变量是强指针(适用于oc对象类型)

l  weak:成员变量是弱指针(适用于oc对象类型)

l  assign:适用于非oc对象类型

 

指针分2钟:

1>  强指针:默认情况下,所有指针都是强指针__strong

2>  弱指针:__weak

 

ARC情况下:当两端循环引用的时候,解决方案:1端用strong,另1端用weak

 

block用来保存一段代码;block的标志:^;

block跟函数很像:1可以保存代码;2有返回值3有形参4调用方式一样

 

block内部可以访问外面的变量;默认情况下,block内部不能修改外面的局部变量;给局部变量加上__block关键字,这个局部变量就可以在block内部修改;

 

 

void (^myBlock)() = ^{

NSLog(@”----------------”);

};

 

int (^sumBlock)(int, int) = ^(int a, intb){

return a + b;

};

 

typedef int (^MyBlock)(int, int);

 

 

协议用途:用来声明一大堆方法;只要某个类遵守了这个协议,就相当于拥有这个协议中的所有方法声明;只要父类遵守了某个协议,就相当于子类也遵守了

@protocol 协议名称 <NSObject>

// 方法声明列表……

@end

// 遵守协议

@interface 子类:父类 <协议1, 协议2>

@end

@protocol 协议名称 <其他协议1, 其他协议2>

@end

// @required 要求实现,不实现就会发出警告

//@optional 不要求实现

一个协议遵守了另外一个协议,就可以拥有这份协议中的所有方法声明

基协议NSObject

 

// 定义一个变量的时候,限制这个变量保存的对象遵守某个协议

类名<协议名称> *变量名;

//要求obj3保存的对象必须是遵守MyProtocol这个协议

NSObject<MyProtocol> *obj3;

 

@property中声明的属性也可用做一个遵守协议的限制

@property (nonatomic, strong) 类名<协议名称> *属性名;

 

协议可用定义在单独.h文件中,也可用定义在某个类中

如果这个协议只用在某个类中,应该把协议定义在该类中;如果这个协议用在很多类中,就应该定义在单独文件中

 

协议的提前声明:@protocol 协议名称;

-------------------------------------- android培训java培训、ios培训期待与您交流! ---------------------------------

 

0 0