1.用@property声明实例的时候,关键字copy和strong有什么区别
在iOS开发中,一般copy关键字用在NSString、NSArray、NSDictionary、block等属性字段的修饰符。
为什么上述属性需要使用copy修饰呢?原因是上述属性都有可变的子类,如 NSString->NSMutableString、NSArray->NSMutableArray、NSDictionary->NSMutableDictionary;根据面相对象的多态特性,NSString类型的变量可以指向NSMutableString类型的变量。声明对象的属性一般都是希望明确知道对象的值,但是如果对子类是可变类型的属性使用strong修饰的话,可能会在对象不知情的情况下修改对象属性的值,这肯定是对象不愿意看到的。
可以变数组、字典用copy修饰的时候,对其操作的时候(增删改)会崩溃。因为用了copy之后,改变量会变成不可变,解决方法是改成实例变量的懒加载模式。
2.block
内部修改外部变量
__block int blockLocal = 100;
static int staticLocal = 100;
避免循环引用
__typeof (self) weakSelf = self;