何时以及为何释放一个对象

时间:2009-07-31 09:23:09

标签: objective-c cocoa memory-management retain

我在我的代码中使用这些行

NSMutableArray * NewsFeedArray;
NewsFeedArray = [[[NSMutableArray alloc]init]retain];

我应该在哪里发布此NSMutableArray,为什么我要发布该对象?在我的项目中,我使用dealloc方法释放对象,但这需要更多时间。

任何人都能解释一下吗?

3 个答案:

答案 0 :(得分:3)

NewsFeedArray =[[[NSMutableArray alloc] init] retain];

这行代码实际上会将对象的保留计数增加到2,这可能就是为什么你遇到的对象没有被完全释放的原因。

答案 1 :(得分:0)

添加后直接释放添加到NewsFeedArray的对象。将它们添加到数组中的事实使它们的保留计数增加1。数组'拥有'它们,当你释放数组时,其中的所有对象的保留计数都会减少一个(通常也会释放它们)。

答案 2 :(得分:0)

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

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

请注意,您无需保留它。

添加内容:

RandomObject* obj = [[RandomObject alloc] init];
// set properties
[news addObject:obj];
[obj release];

您可以释放新对象,因为将其添加到数组会增加其引用次数。

最后,您将以下内容放在dealloc方法中:

[news release];

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