代码之家  ›  专栏  ›  技术社区  ›  DevDevDev

目标C自动释放对象的成员初始化

  •  2
  • DevDevDev  · 技术社区  · 16 年前

    嘿,如果我有像

    @interface MyClass {
       NSArray* myArray;
    }
    @end
    
    @property (retain, nonatomic) NSArray* myArray;
    

    在init方法中,我应该做些什么

    myArray = [[NSArray array] retain];
    

    self.myArray = [NSArray array];
    

    我认为前者会更受欢迎,因为它更清楚发生了什么?我想另一种表达方式应该是,您应该在实现中与成员的属性交互,还是严格使用成员本身?

    2 回复  |  直到 16 年前
        1
  •  8
  •   Louis Gerbarg    16 年前

    第一个是首选的,因为如果您通过访问器,它可以触发kvo通知,如果您的子类对象,这可能会导致奇怪的问题。

        2
  •  1
  •   DougW    16 年前

    除了保持OOP范式之外,setter的一个重要点是正确地释放以前保留的值。既然您在in it中,那么假设没有现有的值通常是安全的,因此使用setter实际上不会获得任何收益。