两个相似的问题
问题1:我有一个名为mySetter的自定义setter :, stockName是否还有强指针?
@property (nonatomic, strong, setter = mySetter:) NSString *stockName;
- (void)mySetter:(NSString *)name {
_stockName = name;
}
问题2:我覆盖了默认的setter,stockName是否仍然保持强指针?
@property (nonatomic, strong) NSString *stockName;
- (void)setStockName:(NSString *)stockName {
_stockName = stockName;
}
感谢您的回复
答案 0 :(得分:0)
来自Encapsulating Data in"使用Objective-C编程":
注意:编译器将自动合成实例变量 在所有情况下,它也合成至少一个访问者 方法。如果为读写实现getter和setter 编译器将使用属性或只读属性的getter 假设您正在控制属性实现 并且不会自动合成实例变量。
由于您未实现 getter ,因此合成了实例变量_stockName
。
为此,如果您使用setter的默认名称或自定义名称,则无关紧要。
并声明该物业为“强大的”#34;隐含__strong
所有权
关联的实例变量,请参阅"4.1.1. Property declarations"
在" Clang / ARC"文档。
答案 1 :(得分:0)
如果您使用ARC
并且指定了strong
访问说明符,则属性将包含强引用。 ARC将进行保留/释放。在non arc
下覆盖访问器方法不是这样的。你应该处理retain/release
。通过setter = mySetter:
,您只需为访问者方法指定别名。这对实施没有任何影响。两种方法都做同样的事情。还有一件事mySetter:
不会成为stockName
的设定者setStockName
答案 2 :(得分:0)
stockName
提供strong
所有权时, property
会保留strong
指针。因此,在这两种情况下,您都将获得strong
指针引用。
但是对于您提出的问题,您可以将stockName
用作iVar
,setter
方法和getter
方法
问题1
iVar
= stockName
getter
= [self stockName]
或self.stockName
setter
= [self mySetter:]
问题2
iVar
= stockName
getter
= [self stockName]
或self.stockName
setter
= self.stockName =
或[self setStockName:]