ARC和C ++对象中的Objective C对象会发生什么?

时间:2014-05-03 01:47:30

标签: c++ objective-c automatic-ref-counting

我很惊讶这编译没有错误。当ARC第一次出现时,我认为不习惯。

class SessionWriter
{
    NSString *sessionDir;
    ...
};

看起来ARC在析构函数中释放NSString。这记录在哪里?

1 个答案:

答案 0 :(得分:2)

Objective-C ++一般来说文档很少。除了Apple的高级教程和低级API列表之外,Objective-C 2.0语言本身缺乏正式的规范,而Objective-C ++则更少。从广义上讲,似乎你应该相信,在C和C ++作为基本语言的过渡中,事物在逻辑上“起作用”。

Clang ARC文档做touch on this a bit,尽管它们实际上描述了Objective-C和Objective-C ++结构之间的行为差​​异而不是C ++类。但是,很明显,ARC确实可以用于Objective-C ++聚合。

  

非重要的所有权限定类型被认为是非POD:在C ++ 11术语中,它们不是简单的默认可构造,可复制构造,移动可构造,可复制可分配,可移动可分配或可破坏。使用ARC之外的类是违反C ++的一个定义规则的,在ARC下,它将拥有一个非常重要的所有权限成员。

     

原理

     

与C不同,我们可以将所有权限的子对象的所有必要ARC语义表示为类的(默认)特殊成员函数的子操作。这些功能变得非常重要。这具有非显而易见的结果,该类将具有非平凡的复制构造函数和非平凡的析构函数;如果在ARC之外通常不会出现这种情况,那么该类型的对象将以ABI不兼容的方式传递和返回。