我已经看过很多下面的片段:
在标题中:
SomeClass *bla;
@property(nonatomic,retain) SomeClass *bla;
在实现文件中:
@synthesize bla;
and then
self.bla = [[SomeClass alloc] init];
我认为这个分配使“bla”的保留计数增加了两倍;一旦通过 alloc/init 调用,然后通过我们要求通过合成属性设置器发生的保留。
因此,我通常这样声明我的属性:
在标题中:
SomeClass *_bla; // note the underscore
@property(nonatomic,retain) SomeClass *bla;
在实现文件中:
@synthesize bla = _bla;
and then
_bla = [[SomeClass alloc] init];
假设我最初的假设是正确的 - 我有兴趣听听是否有“正确”的方法来做到这一点,即属性的声明、初始化和内存管理?
是的,你是对的 - 使用 a 的综合设置器retain
属性会增加您已经拥有的实例的引用计数(如alloc
意味着所有权)。
只需使用您在初始化程序中提到的第二种形式即可:
_bla = [[SomeClass alloc] init];
...并记住修复保留计数,否则,例如:
self.bla = [[[SomeClass alloc] init] autorelease];
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)