Управление памятью NSString и NSData - PullRequest
1 голос
/ 28 июля 2010

У меня есть следующий код для создания строки NSSt, которая содержит тело текстового файла, а затем преобразует его в NSData и выводит его в файл.

NSString *particleString = [[NSString alloc] initWithFormat:@"%@", @"This is the body of my file"];                 
NSData *metaVals = [particleString dataUsingEncoding:NSISOLatin1StringEncoding];

Так как я создал частичку строки с использованием alloc, я подумал, что мне нужно освободить ее после того, как я завершу преобразование в NSData, поэтому я добавил

[particleString release];

Но мое приложение вылетает, когда я добавляю эту строку. Однако, когда я удаляю строку, в которой я использую ее для создания мета-значений, я могу смело освобождать ее.

Может кто-нибудь объяснить, почему передача его в NSData мешает мне выпустить его? Я верю, что владею частичкой частиц, что происходит?

Ответы [ 2 ]

3 голосов
/ 28 июля 2010

В соответствии с вашим комментарием вы делаете particleString = [particleString stringByAppendingFormat:@"%@", @"Some other string"];, который теряет ссылку на исходную частице String и заменяет ее на автоматически выпущенную версию.Затем вы продолжаете выпускать автоматически выпущенную версию, вызывая как утечку оригинальной частицы String, так и перевыпуск новой.

Попробуйте это

NSString *particleString = [NSString stringWithFormat:@"%@", @"This is the body of my file"];
particleString = [particleString stringByAppendingFormat:@"%@", @"Some other string"]; 
NSData *metaVals = [particleString dataUsingEncoding:NSISOLatin1StringEncoding]; 

У него больше нет выпускапоскольку обе строки теперь автоматически высвобождаются.

Я бы предложил перечитать правила управления памятью

1 голос
/ 28 июля 2010
[particleString stringByAppendingFormat:@"%@", @"Some other string"];

возвращает вновь созданный объект.это означает, что первый объект, созданный и назначенный дляичеимеет метод с именем appendFormat: (NSString *) ...

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