内存管理的实用规则如下:
-
您只拥有那些您使用名字以“alloc”或“new”开头或者名字中包含“copy”的方法(例如
alloc
,newObject
或mutableCopy
)创建的对象,或者是那些收到了您发送的retain
消息的对象。许多类提供了形如
+className...
的方法,您可以使用它们获得该类的一个新的实例。这些方法通常被称为“简便构造函数”,它们创建一个新的类的实例,对其进行初始化并将其返回供您使用。您并不拥有从简便构造函数或其它存取方法返回的对象。 -
一旦您使用完一个您拥有的对象,您应该使用
release
或autorelease
释放这个对象的所有权。通常,您应该使用
release
,而不是autorelease
。只有在不适合立即回收对象的情况下,您才应该使用autorelease
,比如您要从某个方法返回对象。(注意:这并不是说release
必然会引起对象的回收—只有当保留计数减少至0
时才会发生回收—但它也有可能会发生,而有时您需要防止出现这种情况,请参考“从方法返回对象”中的例子。) -
实现
dealloc
方法来释放您拥有的实例变量。 -
您不应该直接调用
dealloc
(除非是您在自定义的dealloc
方法中调用超类的实现)。