iOS常见面试题

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;

posted @ 2019-05-05 15:54  hello_小磊  阅读(106)  评论(0编辑  收藏  举报