Objective-C布尔值的dealloc

3

我该如何释放布尔值?

使用以下方式释放会出现警告:Incompatible pointer to integer conversion assigning to 'BOOL' (aka 'signed char') from 'void *'

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

也许我应该澄清一下,这是从一个继承自NSObject的简单类中获得的。
我正在使用在Cocoa Touch类中看到的self.var = nil模式。假设它是NSString*,那么在dealloc方法中我应该使用self.var = nil还是[var release]?我有点困惑。
3个回答

10

你不需要这样做。它不是一个对象。这也解释了警告,因为你试图将一个空指针(对于对象来说就是NULL)赋值给一个非对象。


关于你的第二个问题,是的。你可以把基本变量看作对象的一部分,所以当它被释放时,这些变量也将不存在。

但是当你在一个对象中有一个NSString *时,它只是指向另一个对象的指针。如果你释放前者,指针将被删除,而不是NSString。可能没有其他人会指向它,它就像漂浮在空气中,占用着内存。所以,在删除指针之前,如果你不再需要这个对象,你可以向它发送一个释放消息。这通常在dealloc方法中完成,因为它被调用来“删除”一个对象,因此也是删除其他没有用处的对象的好地方。


2

您不需要释放BOOL,因为BOOL实际上只是一个字节,它是一种原始数据类型。您只需要释放已分配给内存的对象。


0
首先,如果booleanVar只是一个普通的BOOL值,就像这样声明的:
BOOL booleanVar;

如果你不需要释放与它相关的任何内存,那么你就不需要释放它,因为当持有它的类被分配和解除分配时,该内存被分配和释放。所以在dealloc中没有针对booleanVar的代码是可以的。

然而,如果你说的是一个指向BOOL类型的指针,定义如下:

BOOL *booleanVar;

如果您想将此变量设置为非值,则应将其设置为NULL,而不是nil,因为NULL用于值指针,nil用于对象指针(参见: Objective-C的NULL vs nil)。
但是,如果您想释放BOOL指针指向的内存,该内存是使用mallocrealloc等分配的,请尝试free() C函数(参见:http://www.cplusplus.com/reference/clibrary/cstdlib/free/)。
如果您显示了类接口中布尔变量的属性声明,这将真正澄清所有这些问题,这将告诉我们您要做什么,并且您将获得完全确定的答案。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接