第一个问题
当Objective-C中保留一个对象的属性时,为什么同一个类的第二个实例指向同一个对象?如果您实例化一个新类,那么从逻辑上讲,您会想要一个具有单独属性的单独类。retain
我知道只增加保留计数并且copy
会浅拷贝。
我创建了一个具有保留的类NSURLRequest
。我初始化了该类的两个实例。更改任何已创建类的属性将更改所有类。当我在该物业上使用副本时,它停止了这样做。然而,在线阅读,它说不copy
可变对象本质上是一个浅拷贝,因为你真的不想要一个单独的实体,因为它永远不能改变。在这种情况下,NSURLRequest
它是不可变的,那么我的示例是如何通过调用copy
不可变对象来工作的呢?这是我复制它的方式:
- (id)initWithRequest:(NSURLRequest *)request {
self = [super initWithNibName:nil bundle:nil];
if (self) {
_request = [request copy];
}
return self;
}
第二个问题
我一直在阅读,基本上对于所有不可变对象,我需要使用copy
和对于可变对象使用retain
(或现在在 ARC 中strong
)。如果 IBOutlets 是weak
指针,如果我在没有 Interface Builder 的情况下绘制视图怎么办?UIKit
元素是copy
or retain
/吗strong
?
谢谢!