2011-05-30 2 views
0

Я использую NSArray, названный как allAvailableServices. сначала я инициализирую его и после написания [allAvailableServices release]; тогда я проверил состояние if (allAvailableServices). все получилось! Могу я узнать причину. тогда я написал allAvailableServices = nil; и [allAvailableServices release]; после кода выше если (allAvailableServices) пришел false.is есть какие-либо проблемы, которые я написал [allAvailableServices release]; после allAvailableServices = nil;проблема с нолем и выпуском?

всякий раз, когда я allAvailableServices = nil нужно выделить новый array.so если я Бесполезный 't call [allAvailableServices release]; Я думаю, что есть проблема memory.am, я исправлю? может ли кто-нибудь предоставить мне лучший способ справиться с этим?

ответ

7

Релиз только восстанавливает память, но значение указателя не изменяется; он по-прежнему содержит значение, но указывает на мусор.

Вот почему многие люди NIL их указатель после освобождения его:

[allAvailableServices release], allAvailableServices = nil; 

В Objective-C, это безопасно, чтобы отправить сообщение на ноль, но посылает сообщение на объект, который был выпущен может приводят к сбою приложения (обычно с EXC_BAD_ACCESS)

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

1

Если вы используете аксессоры, вы можете напрямую установить значения в nil, он вызывает выпуск и устанавливает их в nil. Релиз уменьшает счетчик ссылок на 1, и если он достигает 0, объект освобождается.

Память по-прежнему имеет некоторое значение, если вы не установите нуль и, следовательно, проблему в вашем условии if.

Чистый способ заключается в использовании аксессуаров и звоните self.yourvariable = nil;.

+0

+1 Для предложений недвижимости. [Свойства] (http://programmers.stackexchange.com/questions/36262/what-guidelines-do-you-suggest-for-using-objective-c-properties/78328#78328) вместо ivars помогает * много * чтобы избежать проблем с памятью. –

Смежные вопросы