Objective-C Deloloc с логическим значением - PullRequest
3 голосов
/ 14 июня 2011

Как бы я dealloc логическое значение?

Удаление этого способа ниже дает мне предупреждение: Несовместимый указатель на целочисленное преобразование, присваивающее 'BOOL' (также известный как 'char)' из 'void *'

- (void)dealloc {
    self.booleanVar = nil;
    [super dealloc];
}

Возможно, я должен уточнить, что это от простого класса, унаследованного от NSObject.

Я использую шаблон self.var = nil, который вы видите в классах Cocoa Touch. Скажем, если бы это был NSString *, я должен использовать self.var = nil или [var release] в методе dealloc? Я немного запутался здесь.

Ответы [ 3 ]

10 голосов
/ 14 июня 2011

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


Относительно вашего второго вопроса, да. Вы можете думать о примитивных переменных как о части объекта, поэтому, когда они освобождены, переменные больше не будут существовать.

Но когда у вас есть NSString * в объекте, это просто указатель на другой объект. Если вы удалите первый, указатель будет удален, а не NSString. Никто не может указывать на это, он как бы теряется в воздухе, занимая память. Итак, перед удалением указателя, если вам больше не нужен объект, отправьте ему сообщение об освобождении. Это делается в методе dealloc, так как он вызывается для «удаления» и объекта и, следовательно, является хорошим местом для удаления также всех других объектов, которые больше не нужны.

2 голосов
/ 14 июня 2011

Вам не нужно освобождать BOOL, поскольку BOOL на самом деле являются просто байтом, который является примитивным типом данных. Вам нужно только освободить объекты, которые были выделены для памяти.

0 голосов
/ 14 июня 2011

Прежде всего, если booleanVar - просто простое значение BOOL, как оно объявлено следующим образом:

BOOL booleanVar;

, тогда вам не нужно освобождать какую-либо память, связанную с ним, так какэта память выделяется и освобождается, когда класс, который ее содержит, выделяется и освобождается.Так что никакой код для booleanVar в dealloc не подойдет.

Однако, если вы говорите о указателе для BOOL, определенном так:

BOOL *booleanVar;

и то, что вы хотите, эточтобы установить эту переменную в ненулевое значение, вы должны установить ее равной NULL вместо nil, поскольку NULL для указателей значений и nil для указателей объектов (см .: NULL vs nilв Objective-C ).

Однако, если вы хотите освободить память, на которую указывает указатель BOOL, выделенный с помощью malloc или realloc и т. д., попробуйтефункция free() C (см .: http://www.cplusplus.com/reference/clibrary/cstdlib/free/).

Что действительно прояснит все это, если вы покажете нам объявление свойства для booleanVar в интерфейсе класса, которое точно скажет нам, что вы хотите сделатьи вы получите ответ с полной уверенностью.

...