代码之家  ›  专栏  ›  技术社区  ›  Cocoa Dev

iPhone关于属性的问题

  •  1
  • Cocoa Dev  · 技术社区  · 14 年前

    如果声明具有retain属性的属性,是否需要在将其设置为nil之前释放该属性?

    @synthesis指令做什么?

    3 回复  |  直到 14 年前
        1
  •  2
  •   nacho4d    14 年前

    在设置另一个对象之前,您确实需要释放(保留的)对象,或者在属性var中释放nil,但如果您愿意,这是由访问器完成的。

    self.myVar = nil;
    

    @synthesis所做的是自动为您创建访问器方法(如果您没有定义它们的话)

    因此,如果您将您的财产写为:

    @property (nonatomic, retain) NSObject *property;
    

    那么你可以认为合成的访问器是 相等的 (我说的是等价的,因为我们不知道这是怎么做到的……有关更多信息,请阅读以下文档)至:

    - (void) setProperty:(NSObject *)aProperty{
        if(property != aProperty){
            [property release];
            property = [aProperty retain];
        }
    }
    
    - (NSObject*) property{
        return property;
    }
    

    这一部分非常重要,我建议花尽可能多的时间来了解这一点。(同时阅读复制和分配)

    Apple doc on Properties

        2
  •  2
  •   James Huddleston    14 年前

    在将保留属性设置为 nil 只要你使用一个为你做释放的setter。如果你申报的财产 retain ,合成设置器将为您进行发布。这就把我们带到 @synthesize 指令。它只是告诉编译器使用在中指定的属性为您编写setter和getter。 @property .

        3
  •  0
  •   Aviad Ben Dov    14 年前
    1. 不,事实上你根本不需要释放它。那将是一个错误。你甚至不需要将它设置为零,除非你真的想要控制它何时被释放(在你自己的类的释放之前,也就是说)。
    2. 以优化的方式为您创建getter和setter方法。

    有关更多信息,我建议您阅读 the relevant page in the guide .