Цель C - NSString - Основы памяти - PullRequest
0 голосов
/ 22 июня 2011

Я пытаюсь вернуть строку NSString, которая была инициализирована из plist.

Если я закомментирую мои строки выпуска, этот код работает.Однако я хотел бы освободить эти объекты из памяти, поскольку они мне больше не нужны.

Я думал, что initWithString скопирует содержимое целевой строки в мою новую строку, что означает, что я мог бы безопасно выпустить NSMutableArray.Но это не так.Почему нет?

+ (NSString*) genImage {

NSString *path = [[NSBundle mainBundle] pathForResource:
                  @"Images" ofType:@"plist"];
NSMutableArray *arrayOfImages = [[NSMutableArray alloc] initWithContentsOfFile:path];

NSLog(@"%d", [arrayOfImages count]);

int indexToLoad = 0;

NSString *res = [[NSString alloc] initWithString:[arrayOfImages objectAtIndex:indexToLoad] ];

[arrayOfImages release];
[path release];
return res;

}

1 Ответ

2 голосов
/ 22 июня 2011

Вы не сохраняете возвращаемое значение -[NSBundle pathForResource:ofType:] (переменная path), поэтому нет необходимости сбрасывать его (и это, скорее всего, приведет к сбою).Однако, вы должны автоматически выпустить res, так как вы делаете сохраняете это.Вы можете изменить свою последнюю строку на

return [res autorelease];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...