将对象添加到数组时,它会调用retain
该对象.如果你没有释放指向该对象的指针,那将是一个泄漏.当你释放数组时,它会调用release
它所拥有的所有对象,因为它retain
之前已经调用过.
至于autorelease vs release,唯一可以确定的方法(除了可能阅读文档之外)是通过方法的名称.我相信一般的规则是,如果你没有分配对象,那么你不负责释放它.
关于所述对象创建方法中,所有的方便的方法(array:
,arrayWithObjects:
,arrayWithArray:
等等)返回自动释放物体.然而,其相应的初始化方法(init:
,initWithObjects:
,initWithArray:
,等)不-如果你打电话给他们,你是负责调用release
返回的对象.
我似乎在这里回忆一些关于这个主题的其他问题 - 你可以尝试四处寻找更彻底的解释.
将对象添加到数组时,它会调用retain
该对象.如果你没有释放指向该对象的指针,那将是一个泄漏.当你释放数组时,它会调用release
它所拥有的所有对象,因为它retain
之前已经调用过.
至于autorelease vs release,唯一可以确定的方法(除了可能阅读文档之外)是通过方法的名称.我相信一般的规则是,如果你没有分配对象,那么你不负责释放它.
关于所述对象创建方法中,所有的方便的方法(array:
,arrayWithObjects:
,arrayWithArray:
等等)返回自动释放物体.然而,其相应的初始化方法(init:
,initWithObjects:
,initWithArray:
,等)不-如果你打电话给他们,你是负责调用release
返回的对象.
我似乎在这里回忆一些关于这个主题的其他问题 - 你可以尝试四处寻找更彻底的解释.
将Objective-C内存管理视为所有权而不是保留释放更容易.将对象添加到数组时,该数组现在是该对象的共同所有者,并负责正确管理内存.当所有者(任何对象包含您发布的代码)调用release
对象时,它将放弃所有权,现在该数组是唯一的所有者.
Apple对Cocoa中的所有权如何运作有一个很好的入门(包括你如何知道你何时负责调用release
一个对象):Cocoa的内存管理编程指南.如果你想使用Cocoa,这是必读的.