Objective c 何时以及为什么释放对象

Objective c 何时以及为什么释放对象,objective-c,cocoa,memory-management,retain,Objective C,Cocoa,Memory Management,Retain,我在代码中使用这些行 NSMutableArray * NewsFeedArray; NewsFeedArray = [[[NSMutableArray alloc]init]retain]; 我应该在哪里释放此NSMutableArray,为什么要释放该对象?在我的项目中,我用dealloc方法释放对象,但这样做需要更多的时间 有人能解释一下吗?添加到NewsFeedArray的对象在添加后立即释放。将它们添加到数组中会使它们的保留计数增加1。数组“拥有”它们,当您释放数组时,数组中的所有对

我在代码中使用这些行

NSMutableArray * NewsFeedArray;
NewsFeedArray = [[[NSMutableArray alloc]init]retain];
我应该在哪里释放此
NSMutableArray
,为什么要释放该对象?在我的项目中,我用
dealloc
方法释放对象,但这样做需要更多的时间


有人能解释一下吗?

添加到NewsFeedArray的对象在添加后立即释放。将它们添加到数组中会使它们的保留计数增加1。数组“拥有”它们,当您释放数组时,数组中的所有对象的保留计数将减少一(通常也会释放它们)。

添加到NewsFeedArray中的对象在添加后立即释放。将它们添加到数组中会使它们的保留计数增加1。数组“拥有”它们,当您释放数组时,数组中的所有对象的保留计数将减少一(通常也会释放它们)

这行代码实际上将对象的保留计数增加到2。这可能就是为什么当你期望它完全释放时,你会感觉到它没有被完全释放


这行代码实际上将对象的保留计数增加到2。这可能就是为什么当您希望对象被完全释放时,您会遇到对象没有被完全释放的情况。

当您开始时,您需要这样的东西(可能在
init
方法中):

请注意,您不需要保留它

要添加内容:

RandomObject* obj = [[RandomObject alloc] init];
// set properties
[news addObject:obj];
[obj release];
当将新对象添加到数组中增加其引用计数时,可以释放该对象

最后,在
dealloc
方法中添加以下内容:

NSMutableArray* news = [[NSMutableArray alloc] initWithCapacity:10];
[news release];

释放数组将自动释放它所持有的每个对象。

启动时需要类似的东西(可能在
init
方法中):

请注意,您不需要保留它

要添加内容:

RandomObject* obj = [[RandomObject alloc] init];
// set properties
[news addObject:obj];
[obj release];
当将新对象添加到数组中增加其引用计数时,可以释放该对象

最后,在
dealloc
方法中添加以下内容:

NSMutableArray* news = [[NSMutableArray alloc] initWithCapacity:10];
[news release];
释放阵列将自动释放它所持有的每个对象