当我使用当前处于保留NSArray的对象设置属性时,它是仅存储指针(轻量级)还是将内容复制到属性?
据我所知,它似乎只会分配指针,但我不确定。
此外,在什么情况下使用* pointer = * otherPointer或set方法(例如setDelegate)复制值,而不是只传递指针(如果有的话)。 它不应该只是传递指针地址吗?
答案 0 :(得分:3)
正如你所说,它总是通过指针。除非您专门添加一个取消引用标志,否则情况总是如此。
但是,当您向类中添加属性并将setter设置为copy
时:
@property (nonatomic, copy) id obj;
使用点语法或setter时,会将其翻译为:
_obj = [otherObj copy];
在这里,它将取决于所讨论的对象是否支持复制本身,还是它将回退到它的超类NSObject
或其他中间类的副本。
此外,集合类NSDictionary
和NSArray
执行浅拷贝,因为它们只复制对象的引用,因此您有两个集合指向同一组对象。