【发布时间】:2014-06-09 10:44:58
【问题描述】:
我使用了这个问题的答案List selectors for Objective-C object 并列出了我的类对象响应的所有选择器。在一个巨大的列表中,我发现了一个名为“.cxx_destruct”的选择器(是的,它以点开头),我第一次看到这个,也从未听说过。我用谷歌搜索它并找到了这个Objective C: ARC errors (Automatic release problems)。
我有一些问题?
- 是否与 ARC 有关?
- 如果是选择器,为什么要隐藏?
- 什么时候打电话?由谁,iOS 本身?
- 为什么它命名为 .cxx_destruct? “cxx”的全称是什么?
【问题讨论】:
-
是的。因为它与 ARC 相关,不应手动调用。当您的对象被释放时。由目标 C 运行时。命名模式是因为它与 c++ 的析构函数有关。
-
@Petesh,您能否为此参考 Apple Doc?
-
我没有提到这个;它更多的是编译器级别,而不仅仅是 Apple 特定的。当您有对象类型的实例变量时,编译器会自动发出
.cxx_destructor,以确保它们在销毁时自动取消引用。这就是您不需要编写 dealloc 例程来清空所有属性的原因。它有 .cxx_destructor 标题,因为它利用了 Objective-C++ 析构函数的行为。 -
@Petesh,感谢您的努力,请让您的 cmets 回答,所以我会接受。
-
我们在没有ARC的情况下编译(clang -fno-objc-arc test.m -o test -framework foundation),
标签: ios objective-c selector