布尔值的Objective-C解除分配

| 我将如何“ 0”一个布尔值? 下面以这种方式取消分配它会给我一个警告:整数转换的不兼容指针从\'void * \'分配给\'BOOL \'(aka \'signed char \')
- (void)dealloc {
    self.booleanVar = nil;
    [super dealloc];
}
也许我应该澄清一下,这是从NSObject继承的简单类中获得的。 我使用的是您在Cocoa Touch类中看到的self.var = nil模式。比方说,如果它是NSString *,则应在
dealloc
方法中使用self.var = nil或[var release]吗?我在这里有点困惑。     
已邀请:
        您不需要这样做。它不是对象。这也解释了警告,因为您正试图将nil指针(基本上是对象的NULL)分配给非对象。 关于第二个问题,是的。您可以将原始变量视为对象的一部分,因此,在重新分配对象时,var将不再存在。 但是,当一个对象中有一个“ 3”时,它只是指向另一个对象的指针。如果取消分配前者,则将删除指针,而不是
NSString
。没有人会指出它,它有点迷失了,占据了记忆。因此,在删除指针之前,如果不再需要该对象,则向其发送释放消息。这是在dealloc方法中完成的,因为它被称为“ delete”和object,因此是删除不再使用的所有其他对象的好地方。     
        您不需要取消分配BOOL,因为BOOL实际上只是一个字节,它是原始数据类型。您只需要取消分配已经分配给内存的对象。     
        首先,如果booleanVar只是一个普通的
BOOL
值,则声明如下:
BOOL booleanVar;
那么您就不需要释放与其关联的任何内存,因为当分配和释放保存该内存的类时,便会分配并释放该内存。所以在dealloc中没有booleanVar的代码会很好。 但是,如果您要谈论的是
BOOL
的指针,定义如下:
BOOL *booleanVar;
并且想要将该变量设置为非值,则应将其设置为等于
NULL
而不是
nil
,因为
NULL
用于值指针,
nil
用于对象指针(请参阅:Objective-C中的NULL vs nil)。 但是,如果要释放
BOOL
指针指向的内存(分配有
malloc
realloc
等),请尝试
free()
C函数(请参见:http://www.cplusplus.com/reference/clibrary/ cstdlib / free /)。 如果您在类接口中向我们展示了booleanVar的属性声明,这将真正清除所有问题,这将告诉我们您到底想做什么,并且会得到完全确定的答案。     

要回复问题请先登录注册