当我为一个可变的接口声明一个属性时,我应该总是这样做(非原子的,复制的)吗?另外,我什么时候会使用赋值而不是保留?
发布于 2014-06-20 03:02:50
当您更关心性能而不是线程安全时,请使用nonatomic。原子属性是线程安全的,但速度较慢。默认行为是atomic。
每当将新值设置为属性时,如果希望复制,请使用copy。请注意,在许多情况下,copy实际上不会生成对象的副本,因此这通常不会对性能产生影响,但是如果有人给您一个可变的副本(例如,您有一个NSString属性,并且有人指定了一个NSMutableString ),它可以解决错误。
不要使用retain或strong,因为只有在关闭ARC时才需要这些,而且您应该始终打开ARC。strong和retain是相同的,这是启用ARC的默认行为。只需打开ARC,忽略这些,除了向后兼容的代码。
有时,例如委托属性,使用retain或strong会造成内存泄漏。在这些情景中,您需要使用weak或assign。通常,您应该使用weak,因为assign可能有罕见的边缘情况错误。
发布于 2020-03-08 05:54:25
通常,您可以在类实现中@synthesize一个属性,该属性创建一个set函数。您可以编写自己的属性集函数,并在其中执行可变副本。问题解决了..。
- (void)setPropertyName:(propertyType *)newProperty {
if (propertyName) [propertyName release];
propertyName = [newProperty mutableCopy];
}https://stackoverflow.com/questions/24319206
复制相似问题