Есть ли утечка памяти при переназначении переменной? - PullRequest
0 голосов
/ 10 августа 2009

Предположим, у меня есть переменная, которая уже была инициализирована в строку с помощью комбинации alloc / init. Будет ли у меня утечка памяти, если я переназначу ее через обработку, т. Е.

NSString *s = [[NSString alloc] initWithString:someOtherStringVariable];
s = [s stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];

Здесь произошла утечка памяти? Если да, нужно ли мне создавать другую переменную (например, s2), выполнять это назначение, а затем выпускать оригинал?

NSString *s = [[NSString alloc] initWithString:someOtherStringVariable];
NSString *s2 = [s stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
[s release];

Теперь, что если какая-то другая строка является константой, например, @ "Some other string". Должен ли я беспокоиться об утечке? то есть.

NSString *s = [[NSString alloc] initWithString:@"Some other string"];
s = [s stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];

Спасибо

1 Ответ

7 голосов
/ 10 августа 2009

Это определенно утечка. Самый простой способ позаботиться о подобных проблемах - это выполнить автоматический выпуск раньше, чем позже:

NSString *s = [[[NSString alloc] initWithString:@"Some other string"] autorelease];
s = [s stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];

Вы также можете использовать NSMutableString, чтобы сделать это на месте (если это не условный пример).

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