【发布时间】:2011-05-12 16:35:50
【问题描述】:
我想填充这样的数组:
NSMutableArray *array = [self methodThatReturnsAnArray];
在“methodThatReturnsAnArray”方法中,我创建了一个这样的数组:
NSMutableArray *arrayInMethod = [[NSMutableArray alloc] init];
当我完成填充“arrayInMethod”时,我将返回数组,为了防止我正在使用的内存泄漏:
return [arrayInMethod autorelease];
但是“数组”-变量永远不会被填充。删除“自动释放”时,它可以正常工作。我应该怎么做才能确保我释放了返回的对象?
编辑
+ (NSMutableArray *)buildInstants:(NSArray *)huntsArray {
NSMutableArray *goGetObjects = [[[NSMutableArray alloc] init] autorelease];
for (int i = 0; i < [huntsArray count]; i++) {
NSDictionary *huntDict = [huntsArray objectAtIndex:i];
PHGoGet *goGet = [[PHGoGet alloc] init];
goGet.title = [huntDict objectForKey:@"title"];
goGet.description = [huntDict objectForKey:@"description"];
goGet.start = [huntDict objectForKey:@"start"];
goGet.end = [huntDict objectForKey:@"end"];
goGet.ident = [huntDict objectForKey:@"id"];
if ((CFNullRef)[huntDict objectForKey:@"image_url"] != kCFNull) {
goGet.imageURL = [huntDict objectForKey:@"image_url"];
} else {
goGet.imageURL = nil;
}
if ((CFNullRef)[huntDict objectForKey:@"icon_url"] != kCFNull) {
goGet.iconURL = [huntDict objectForKey:@"icon_url"];
} else {
goGet.iconURL = nil;
}
goGet.longitude = [huntDict objectForKey:@"lng"];
goGet.latitude = [huntDict objectForKey:@"lat"];
goGet.companyIdent = [huntDict objectForKey:@"company_id"];
[goGetObjects insertObject:goGet atIndex:i];
[goGet release];
}
return [[goGetObjects copy] autorelease];
}
【问题讨论】:
-
删除
autorelease应该不会有任何区别,至少不会立即生效。你能把剩下的代码发到methodThatReturnsAnArray吗? -
你在哪里检查没有填充数组?在返回之后或一段时间后(可能来自按钮处理程序)?
-
@kubi 现在我添加了一些代码
-
-copy方法返回一个 NSArray 但方法定义将其定义为 NSMutableArray 但如果您想返回一个 NSMutableArray 对象,您只需将最后一条语句更改为return goGetObjects; -
我看不出有什么问题。您看到了什么错误/不良行为?
标签: iphone objective-c nsmutablearray return autorelease