Objective-C返回数组 - 内存问题

时间:2011-01-11 05:34:07

标签: iphone objective-c ios memory-leaks

我想返回一个带有三个对象的NSMutableArray。这就是我所拥有的:

NSMutableArray *output = [[NSMutableArray alloc] init];
NSString *a = [[NSString alloc] initWithFormat:@"%i",aa];
NSString *b = [[NSString alloc] initWithFormat:@"%i",bb];
NSString *c = [[NSString alloc] initWithFormat:@"%i",cc];

[output addObject:a];
[output addObject:b];
[output addObject:c];

return output;

但是我的内存泄漏了。有什么问题?

5 个答案:

答案 0 :(得分:4)

第一期:

尝试这种方式,然后NSString将被释放。 [NSString stringWithFormat:@"%@", aa]; 还要关注格式占位符:

  • %i for Int
  • %d代表其他数字
  • %@ for Strings和更多对象。

第二期:

并使用输出var进行自动释放,因为函数中的最后一个操作是重置。

NSMutableArray *output = [[[NSMutableArray alloc] init] autorelease];

完整代码段:

NSMutableArray *output = [[[NSMutableArray alloc] init] autorelease];
NSString *a = [NSString stringWithFormat:@"%@", aa];
NSString *b = [NSString stringWithFormat:@"%@", bb];
NSString *c = [NSString stringWithFormat:@"%@", cc];


[output addObject:a];
[output addObject:b];
[output addObject:c];

return output;

欢呼endo

答案 1 :(得分:2)

使用此

NSMutableArray *output = [NSMutableArray array];
NSString *a = [NSString stringWithFormat:@"%i",aa];
NSString *b = [[NSString stringWithFormat:@"%i",bb];
NSString *c = [[NSString stringWithFormat:@"%i",cc];

[output addObject:a];
[output addObject:b];
[output addObject:c];

return output;

这里没有泄漏,你在数组和字符串中都有泄漏。

答案 2 :(得分:1)

您需要在其上输入autorelease。像这样:

NSMutableArray *output = [[[NSMutableArray alloc] init] autorelease];

答案 3 :(得分:0)

你怎么知道你有内存泄漏?如果分析器报告您,则可能是因为您正在返回未标记为自动释放的阵列。所以这取决于你在这种方法之外做了什么。您可能需要:

...
return [output autorelease];
...

或者:

NSArray *a = [[self createArray] autorelease];

此外,您正在分配字符串并将它们放入数组中。然而,这使得字符串2的保留计数。您还需要自动释放它们。或者更确切地说使用[NSString stringWithFormat...]静态初始化器。

答案 4 :(得分:0)

你需要在将它们添加到输出变量之后释放NSString类型的对象,然后在返回之前自动释放输出