Утечка памяти из статического NSString - PullRequest
1 голос
/ 20 апреля 2011

Я впервые программист на Objective C.Я читал код других людей и часто вижу статические строки, созданные, но никогда не выпускаемые.Возьмем для примера:

- (UITableViewCell*)tableView:(UITableView*)tableView 
   cellForRowAtIndexPath:(NSIndexPath*)indexPath
{
   static NSSSTring* foo = @"foo";
   // [code to return a cell for the table]
}

Насколько я понимаю, место для 3 символов в куче выделено для хранения строки "foo".Когда программа завершается, эти 3 символа никогда не возвращаются, потому что автор никогда не освобождает их.Здесь нет утечки памяти?Почему или почему нет?

1 Ответ

1 голос
/ 20 апреля 2011

На самом деле константные строки типа @"foo" обрабатываются компилятором специально. В частности, они не распределены в куче, и они не участвуют в подсчете ссылок, то есть фактически никогда не освобождаются; их память является частью образа вашей программы, так же как и, скажем, "foo". Тем не менее, это следует рассматривать как подробности реализации этого конкретного подкласса NSString. Следуйте обычным правилам хранения / выпуска ссылок.

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