OK,又到了金三银四的求职跳槽高峰期,先整理一下面试中常见的一些问题的知识点吧,这篇文章会持续更新。
@dynamic与@synthesize的区别
iOS中默认修饰词为@synthesize。
@dynamic修饰的变量表示开发者告知编译器,变量的setter方法和getter方法不需要编译器自动生成,而是开发者自己实现,但是要注意如果在程序运行时,开发者没有实现getter和setter方法,在读取数据或者写入数据时会因为找不到方法导致崩溃的。
@synthesize修饰的变量表示,如果开发者没有自己实现getter方法和setter方法,编译器会帮助开发者来自动加上getter和setter方法。
为什么NSMutableArray(NSMutableDictionary/NSMutableString)不能用copy修饰
因为使用了copy属性之后,当你调用setter方法时,系统会自动copy出一个新的对象,然后释放旧的对象。
比如这段代码:
|
|
等同于:
|
|
这个时候的a数组实际上是一个NSArray而不是NSMutableArray,所以向他发送一些NSMutableArray的方法比如删除、增加的操作时,就会导致系统找不到方法而崩溃。