例如:
myVC.bunnies = self.myBunnies;
或
[self getBunniesWithCompletion:^(NSArray *bunnies) {
self.myBunnies = bunnies;
}];
是否复制了对象,或者它只是被复制的引用,如果它被破坏,一切都会被破坏?
该属性声明如下:
@property (strong, nonatomic) NSArray *myBunnies;
答案 0 :(得分:2)
执行此分配时,将复制引用,并增加引用计数。所有这些都是通过ARC隐式完成的,因为您声明了属性strong
。
如果您想要制作副本,请将声明更改为
@property (copy, nonatomic) NSArray *myBunnies
这会更昂贵,但是对象中的数组将与传递给setter的数组隔离。
答案 1 :(得分:1)
这完全取决于你宣布财产的方式:
@property(strong)
:对象引用计数增加,这意味着对象self
保留对受影响对象的引用,以便不释放此对象(直到通过将其设置为已释放引用为止) nil
)@propery(weak)
:简单地指定了对象引用,但未增加引用计数,这意味着self
不会保留对它的引用@property(copy)
:对象被复制(使用<NSCopying>
的{{1}}方法),因此存储了一个新实例,与第一个实例无关我强烈建议您阅读Apple Doc中的“高级内存管理编程指南”。它并不完全是最新的,因为在ARC成为标准之前,文档的某些部分仍然描述了它的工作方式,但阅读理解这些机制仍然总是很有趣。