How*_*ard 21 copy properties objective-c retain nsarray
根据这个:NSString属性:复制还是保留?
对于NSString/NSMutableString,建议使用copy.
NSArray/NSMutableArray怎么样?
Cal*_*leb 26
既然你问的是NSArray(而不是NSMutableArray),你应该使用copy.NSArray是不可变的,因此您不希望该类型的属性发生更改.但是NSMutableArray是NSArray的子类,所以对于传递NSMutableArray的人来说它是完全有效的.如果您只是保留该物体,那么它可能会在您的鼻子下方发生变化.如果您复制而不是保留,则该对象不会更改.
但是,您应该知道,当您复制像NSArray这样的容器时,您只复制容器而不复制其内容.如果数组包含可变对象,则即使数组本身是不可变的,这些对象的内容也可能会发生变化.
jus*_*tin 18
选择copy
,除非你有一个非常具体的理由,以及所有支持代码/接口来支持它.
我详细介绍了这里的基本原理和几个含义: NSMutableString作为保留/复制
该示例基于NSString
s,但同样适用于NSArray
s.
如果基础数据发生更改时出现问题,请使用copy.事实上,这是你大多数时候想要的,因为改变某人背后的数据是错误的良好来源.
请注意,副本基本上只是NSArray的保留.只有在抛出NSMutableArray时,才会涉及更多工作.
从您包含的链接,它几乎归结为:NSString属性:复制还是保留?
如果要确保在执行期间对象的值不会更改,则使用该copy
属性,否则retain
将没有问题.一般来说,retain
将是确定NSMutableArrays和NSArrays(以及许多其他对象),你(通常)更感兴趣的对象,然后在值包含.如果是NSString,你总是对这个值感兴趣,所以你copy
要确保它不会改变.
@jlehr:
这取决于开发人员是否对实际价值感兴趣.每当对实际值感兴趣时,使用copy(因为您不希望在执行期间更改值),否则保留就可以了.来自Apple的文档:
Objective-C代码中的常见做法是复制值对象 - 表示属性的对象.C类型变量通常可以替换值对象,但是值对象具有封装方便实用程序以进行常见操作的优点.例如,使用NSString对象而不是字符指针,因为它们封装了编码和存储.
同样来自Apple的文档,关于价值对象的话题:
值对象本质上是一个简单数据元素(如字符串,数字或日期)的面向对象的包装器.Cocoa中的公共值类是NSString,NSDate和NSNumber.值对象通常是您创建的其他自定义对象的属性.
归档时间: |
|
查看次数: |
12580 次 |
最近记录: |