我想返回一个带有三个对象的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;
但是我的内存泄漏了。有什么问题?
答案 0 :(得分:4)
尝试这种方式,然后NSString将被释放。
[NSString stringWithFormat:@"%@", aa];
还要关注格式占位符:
并使用输出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类型的对象,然后在返回之前自动释放输出