【问题标题】:Objective-c dealloc of boolean value布尔值的Objective-c释放
【发布时间】:2011-06-14 13:23:41
【问题描述】:

我如何dealloc 一个布尔值?

在下面以这种方式释放它会给我一个警告:Incompatible pointer to integer conversion assignmenting to 'BOOL' (aka 'signed char') from 'void *'

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

也许我应该澄清一下,这是从一个从 NSObject 继承的简单类。

我正在使用您在 Cocoa Touch 类中看到的 self.var = nil 模式。假设它是一个 NSString* 而不是我应该在 deallocmethod 中使用 self.var = nil 或 [var release] 吗?我在这里有点困惑。

【问题讨论】:

    标签: objective-c boolean dealloc


    【解决方案1】:

    你不需要这样做。它不是一个对象。这也解释了警告,因为您正在尝试将 nil 指针(基本上是对象的 NULL)分配给非对象。


    关于你的第二个问题,是的。您可以将原始变量视为对象的一部分,因此当它被释放时,变量将不再存在。

    但是当你在一个对象中有一个NSString * 时,它只是一个指向另一个对象的指针。如果你释放前者,指针将被删除,而不是NSString。没有人会指出它,它有点迷失在空气中,占据着记忆。因此,在删除指针之前,如果您不再需要该对象,则向它发送一条释放消息。这是在 dealloc 方法中完成的,因为它被调用来“删除”和对象,因此也是删除所有其他不再使用的对象的好地方。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

        首先,如果 booleanVar 只是一个普通的 BOOL 值,它的声明如下:

        BOOL booleanVar;
        

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

        但是,如果您谈论的是指向 BOOL 的指针,则定义如下:

        BOOL *booleanVar;
        

        而您想要将此变量设置为非值,您应该将其设置为等于NULL 而不是nil,因为NULL 用于值指针,nil 用于对象指针(请参阅:NULL vs nil in Objective-C)。

        但是,如果您想要释放BOOL 指针指向的内存,使用mallocrealloc 等分配,那么请尝试free() C 函数(请参阅:http://www.cplusplus.com/reference/clibrary/cstdlib/free/ )。

        如果您在类接口中向我们展示 booleanVar 的属性声明,这将真正清楚这一切,它会准确地告诉我们您想要做什么,并且您会得到完全确定的答案。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-01-31
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-10-12
          • 1970-01-01
          • 2010-12-22
          • 1970-01-01
          相关资源
          最近更新 更多