我仍在学习CocoaTouch的一些细微差别。在ARC环境中,内部为float,int等类型生成什么样的getter / setter?
我知道,如果该属性是非ARC上的对象,则我可能会遇到以下情况:
- (NSURL *)url {
if (_url == nil)
_url = [[MyURL alloc] initWithURL:url];
return _url
}
- (void)setUrl:(NSURL *)theUrl {
if (theUrl != _url) {
[_url release];
_url = [theUrl retain];
}
}
但是在ARC环境中,不能使用发布和保留。在这种情况下,会为ARC环境自动创建哪种类型的吸气剂/设置剂。
那么浮点数,整数等标量类型呢?
最佳答案
一些想法:
int
,bool
等)的访问器方法(getter和setter)与对象的标准访问器方法非常相似,唯一的区别是没有内存管理语义,因为它们没有除了在对象上下文内没有任何意义。因此,您将看不到这些基本数据类型的strong
或weak
。因此,retain
的概念也不适用。 strong
属性的对象生成的设置器与非ARC代码中对象的retain
属性的设置器并无不同。这样会增加保留计数(也称为“保持强引用”)。现在,很明显,如果您是为自己的strong
属性编写ARC setter(您实际上不应该这样做),则不会编写写着retain
的代码行,但是编译器实际上是在场景。 alloc
或init
。 @property
的retain
的)。显然,自动合成的设置器将自动选择内存寿命限定符(例如retain
与assign
与copy
与...),并为您生成合适的代码,因此最好让它自己做。 关于iphone - ARC环境中的设置者和获取者,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16427537/