2017-06-29  本文已影响20人  傲骨天成科技

1.先用代码示例
@interface ViewController ()
@property (strong, nonatomic) NSArray *bookArray1;
@property (copy, nonatomic) NSArray *bookArray2;
@end

@implementation ViewController

打印出的结果是:bookArray1(strong) = (
"我是1",
"你好"
)
bookArray2(copy) = (
"我是1"
)

2.从上面我们大概能看出来strong和copy的区别了吧?
使用strong,则self.bookArray1与可变数组books指向同一块内存区域,books内容改变,导致self.bookArray1的内容改变,因为两者是同一个东西;而使用copy,self.bookArray2在赋值之前,将books内容复制,创建一个新的内存区域,所以两者不是一回事,books的改变不会导致self.bookArray2的改变。

3.说到底就是不同的修饰符,对应不同的setter方法
(1).strong对应的setter方法,是将_property先release(_property release),然后将参数retain(property retain), 最后是_property = property
(2).copy对应的setter方法,是将_property先release (_property release),然后拷贝参数内容(property copy),创建一块新的内存地址,最后_property = property

4.property的本质?
@property = 实例变量 + getter + setter

5.下划线和self的区别?
下划线只代表实例变量,不调用setter方法和getter方法
self会调用setter和getter方法

上一篇 下一篇

猜你喜欢

热点阅读