所有类方法都返回一个自动释放的对象吗?

nev*_*ing 3 iphone cocoa memory-management objective-c

我正在重新阅读Cocoa Programming for Mac OS X的前几章,作者声明其中一个NSCalendarDate类方法返回一个自动释放的对象.我总是假设所有类方法都返回了一个自动释放的对象(因为没有alloc涉及).

您是否有必须专门保留的课程方法?

谢谢.

Joe*_*orn 22

与实例方法一样,类方法应遵循标准的Cocoa内存管理规则.

如果使用名称以"alloc"或"new"开头或包含"copy"(例如,alloc,newObject或mutableCopy)的方法创建对象,或者向其发送保留消息,则获取对象的所有权.您有责任使用release或autorelease放弃您拥有的对象的所有权.在收到对象的任何其他时间,您不得释放它.

据推测,他们正在返回一个自动释放的对象,或者对单例或类似的东西的引用.无论哪种方式,您都不需要释放对象,除非它以"alloc"或"new"开头或包含"copy".您不需要保留它,除非您希望将其保留在当前自动释放池的范围之外,方法是将其存储在iVar或类似的内容中.

  • 澄清一点:在单例的情况下,*类*拥有其唯一的实例,这就是它不释放或自动释放它的原因.在所有其他情况下(通常是方便的工厂方法,例如`stringWithUTF8String:`),该类不打算拥有该实例,因此它会自动释放它. (3认同)