大家好(对不起我的英文)。我是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];?
我不太清楚引用和内存机制是如何工作的。
谢谢!
答案 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)
不要释放对象,因为你没有它们,你甚至没有分配它们。