在覆盖retain
属性的默认setter时,有没有办法避免这种代码?
-(void)setMasterViewController:(UIViewController *)newMaster {
[newMaster retain];
[masterViewController release];
masterViewController = newMaster;
// do custom stuff on set
}
有没有办法访问默认的setter,例如:
-(void)setMasterViewController:(UIViewController *)newMaster {
[defaultSetMasterViewController:newMaster];
// do custom stuff
}
这将使代码保持DRYer。我现在这样做的方式,它是一个retain
属性的事实被提到两次。
答案 0 :(得分:1)
不是真的,因为setter必须执行实际设置。如果你想保留原始的setter,你可以尝试使用键值观察来做到这一点。
然而......是的,如果你正在使用ARC!如果您有@property (strong)
,那么只需说masterViewController = newMaster
ARC就会使用objc_storeStrong
,其中:{/ p>
执行分配给非块类型的
__strong
对象的完整序列。相当于以下代码:id objc_storeStrong(id *object, id value) { value = [value retain]; id oldValue = *object; *object = value; [oldValue release]; return value; }
答案 1 :(得分:1)
CoreData生成原始setter,但一般来说没有这样的可供性。在某些情况下,您可以使用键值观察来替换自定义setter,但如果您可以将支持限制在10.6 + / 4.3 +,那么您的特定问题的解决方案可能是“使用ARC”。它将代表您处理保留/发布内容。