将保留属性设置为新创build的对象的最佳方法

处理创build对象以保留属性是最好的方法? 我已经包含了几个例子。

假设房产是:

@property (nonatomic, retain) myProperty; @synthesize myProperty = _myProperty; 

选项1:

 self.myProperty = [[[MyClass alloc] init] autorelease]; 

选项2:

 self.myProperty = [[MyClass alloc] init]; [self.myProperty release]; 

备选案文3:

 _myProperty = [[MyClass alloc] init]; 

选项4:

 MyClass *property = [[MyClass alloc] init]; self.myProperty = property; [property release]; 

选项1:可接受…但是你正在浪费资源与autorelease。 该引用被添加到需要在运行循环结束时释放的项目列表中……您的variables一直保持到那时,即使它不需要.. etc等等,我相信这个选项被使用经常…但我也相信这是懒惰和浪费。

选项2:混淆。 它本身没有错,但我会说这是不好的forms。

备选scheme3:可接受但不理想。 如果有一个自定义的setter? 等我个人只使用自定义设置本身,或者,可能在类初始化。 否则,你错过了属性的一些好处。

选项4:最好。

如果在保存variables的对象的初始化中:

1)没有。 在部分构造的状态下调用访问器是不好的forms(例如initdealloc

2)没有。 在部分构造的状态下调用访问器是不好的forms(例如initdealloc

3)正确。

例外:如果你的ivars 不是私有的,而且你正在执行声明该属性的types的子类,那么你还必须检查父类是否初始化该属性。 最好使这些属性是私有的,否则不能直接访问子类。

4)没有。 在部分构造的状态下调用访问器是不好的forms(例如initdealloc

当您使用完全构造的实例时:

1)当readbaility比保持堆大小低时更重要。

2)不好。 从getter返回的对象不一定是您分配的对象。

3)不好。 如果_myProperty不是nil可能会引入泄漏。

4)最好

 self.myProperty = [[MyClass alloc] init]; 

使用ARC在编译时生成你的版本并保留。

选项1是正确的。

选项2是绝对错误的。 你永远不会调用 – -release属性访问器的结果。

选项3完全避免了属性。 这在你的-init方法中是正确的,但在其他方法中,最好使用属性setter,除非你有一个很好的理由避免它。

选项4也是正确的,虽然它比选项1更详细。

编辑 :我最初误解了你的select4。