Нужно ли освобождать локальные переменные? - PullRequest
0 голосов
/ 11 октября 2011

В моем приложении есть ошибка NSE, которую я объявляю локально:

NSError *error;

Должен ли я освободить его в методе dealloc или мне нужно освободить его в методе, который я объявил?

Ответы [ 3 ]

3 голосов
/ 11 октября 2011

Пожалуйста, прочитайте Руководство по управлению памятью какао , управление памятью - это то, что вы должны прекрасно понимать. (И это не сложно.) Если вы объявляете переменную в методе, у вас нет указателя на нее в dealloc, поэтому вы не можете освободить ее там - вы можете освободить ее только до выхода из области видимости. , Другой вопрос, стоит ли вообще его выпускать. Это зависит от того, является ли это переменная на основе стека, автоматически высвобождаемая или сохраняемая:

float foo[] = {1, 2, 3}; // stack-based, no releasing necessary
NSString *foo = [NSString stringWithFormat:…]; // autoreleased, you must not release it
NSString *foo = [[NSString alloc] initWith…]; // retained, you must release it
2 голосов
/ 11 октября 2011

Вам необходимо release сделать это локально - при условии, что вы создадите его с помощью alloc / new / copy или retain. (Если вы просто получаете это откуда-то еще, не выделяя и не сохраняя, тогда это не принадлежит вам, и вы вообще не должны выпускать.)

В противном случае, когда он выйдет за пределы локальной области видимости, у вас не будет доступа к указателю, и объект утечет.

0 голосов
/ 11 октября 2011

Вам нужно выпустить его локально.Потому что в методе dealloc мы освобождаем переменные класса или члены данных класса и те переменные, которые используются в файле реализации (например, внешние переменные).

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