Objective-C, возвращающий массив - проблемы с памятью - PullRequest
1 голос
/ 11 января 2011

Я хотел бы вернуть 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 ]

4 голосов
/ 11 января 2011

1-й выпуск:

Попробуйте так, тогда NSString выйдет. [NSString stringWithFormat:@"%@", aa]; Также следите за форматом-заполнителями:

  • % i для Int
  • % d для других номеров
  • % @ для строк и многих других объектов.

2-й выпуск:

и выполните автоматический выпуск с выходным переменным, потому что последнее действие в функции - сброс.

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;

ура эндо

2 голосов
/ 11 января 2011

используйте это

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;

здесь нет утечек, у вас есть утечки в массиве, а также в строках.

1 голос
/ 11 января 2011

Вы хотите вернуть его с autorelease на нем.Как это:

NSMutableArray *output = [[[NSMutableArray alloc] init] autorelease];
0 голосов
/ 11 января 2011

Вам необходимо освободить объекты типа NSString после добавления их в выходную переменную и затем автоматически выпустить вывод перед возвратом

0 голосов
/ 11 января 2011

Откуда ты знаешь, что у тебя утечки памяти?Если Анализатор сообщает вам об этом, возможно, это потому, что вы возвращаете массив, не помеченный для автоматического выпуска.Так что это зависит от того, что вы делаете вне этого метода.Вам может потребоваться:

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

Или:

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

Также вы выделяете строку и помещаете ее в массив.Тем не менее, это позволяет сохранить количество строк 2. Вы также должны автоматически освободить их.Или лучше использовать [NSString stringWithFormat...] статический инициализатор.

...