【发布时间】:2011-06-26 00:04:08
【问题描述】:
我正在尝试了解为什么我的应用程序崩溃并且我正在检查我的代码。我很确定这是对自动释放的有效使用:
(部分代码)
- (NSArray *)allQuestionsFromCategories:(NSArray *)categories {
...
NSMutableArray *ids = [[[NSMutableArray alloc] init] autorelease];
while (sqlite3_step(statement) == SQLITE_ROW) {
[ids addObject:[NSNumber numberWithInt:sqlite3_column_int(statement, 0)]];
}
return [NSArray arrayWithArray:ids];
}
这有效吗? NSArray arrayWithArray 返回一个自动释放对象不是吗?我在理解自动释放对象的范围方面也有一些困难。自动释放的对象(如果在这种情况下)是否会在调用该代码所属的方法的整个方法中被池保留?
- (void)codeThatInvokesTheCodeAbove {
NSArray *array = [self.dao allQuestionsFromCategories];
...
}
返回的数组在整个codeThatInvokesTheCodeAbove 方法中是否有效而不保留它?如果是,它的有效期会更长吗?
在理解它的范围以及何时应该保留自动释放对象时遇到了一些问题。
【问题讨论】:
标签: iphone objective-c autorelease