iOS中的内存管理

时间:2011-02-01 22:06:56

标签: ios memory-management

大家好(对不起我的英文)。我是objetive-C和iOS编程的新手。你能救我吗?

@interface RootViewController : UITableViewController 
{
    NSMutableArray *keysFromQuery;
}

@property (nonatomic, retain) NSMutableArray *keysFromQuery;
....
....
NSString *category = [keysFromQuery objectAtIndex:0];

如果我这样做,[keysFromQuery objectAtIndex:0]会发生什么:[category release];?

如果我之后会发生类别会发生什么:[keysFromQuery release];?

我不太清楚引用和内存机制是如何工作的。

谢谢!

4 个答案:

答案 0 :(得分:3)

请勿在{{1​​}}上致电-release。您不拥有该对象。您必须通过NARC(new / alloc / retain / copy)释放您已拥有的对象。有关详细信息,请阅读Memory Management Programming Guide

答案 1 :(得分:0)

如果返回对象的方法未明确声明它返回“new”,“retain”ed,“alloc”ed,“created”或“copy”-ied对象,则不得释放它。就这么简单。

仅针对

等情况发布(或自动释放)
[object retain];
[object copy];
[SomeClass newInstanceWithProperty: @"a"];
[[SomeClass alloc] initWithProperty: @"a"];

所以在这种情况下,你不需要做任何事情,你提到的“发布”很可能会使你的应用程序崩溃。

答案 2 :(得分:0)

如果我这样做,[keysFromQuery objectAtIndex:0]会发生什么:[category release];? 你不应该这样做,因为它是一个自动释放的对象。

如果我在那之后做什么会发生什么:[keysFromQuery release];? 在初始化后释放keysFromQuery时,NSString仍然保存。

答案 3 :(得分:0)

不要释放对象,因为你没有它们,你甚至没有分配它们。