Почему этот авто-релиз mailString будет избыточным? - PullRequest
1 голос
/ 22 августа 2010

Из связанной темы , как я узнал, что "mailString" ниже уже был автоматически выпущен?

//
+ (void) sendEmail:(NSString *) subject withBody:(NSString *)body {
 NSString *mailString = [NSString stringWithFormat:@"mailto:?@&subject=%@&body=%@",
       [subject stringByAddingPercentEscapesUsingEncoding:NSASCIIStringEncoding],
       [body  stringByAddingPercentEscapesUsingEncoding:NSASCIIStringEncoding]];
 [[UIApplication sharedApplication] openURL:[NSURL URLWithString:mailString]];
 [mailString autorelease];
 }

Ответы [ 3 ]

5 голосов
/ 22 августа 2010

stringWithFormat: - это вспомогательная функция, которая возвращает автоматически освобожденный объект.

Я не могу рекомендовать Руководство по управлению памятью достаточно высоко. Это действительно стоит прочитать, вероятно, не раз.

2 голосов
/ 22 августа 2010

, поскольку mailString не создается инициатором [[NSString alloc]];идиома это должно быть выпущено.

0 голосов
/ 23 августа 2010

Вы не знаете, что объект был автоматически выпущен.

Все, что вы знаете, это то, что не ваша ответственность за его освобождение.

Вы знаете, что, поскольку он был возвращен вам из метода, имя которого не начиналось с 'alloc', 'new' или не содержало 'copy', и вы никогда не вызывали 'retain' против него.

Повторяя сказанное Eiko - прочитайте Руководство по управлению памятью Apple - очень ясно по этой теме.

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