-------------------------------------- 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培训期待与您交流! ---------------------------------