Objective-C属性如何与C ++对象一起工作

时间:2013-02-14 07:51:44

标签: c++ objective-c objective-c++

所以我非常好奇不同类型的属性如何与C ++对象一起使用。

例如说我有一个我声明的属性:

@property (atomic,assign) myClass::sp_t propertyName;

当我调用setter方法时,这个对象是如何处理的?它是使用operator =()简单分配的,从而允许类使用它的operator =()方法复制自身吗?

似乎可能会有一些C ++对象属性的特殊处理,因为我在编译测试程序时遇到了链接器错误。

Symbol not found: _objc_copyCppObjectAtomic

这是一个赋值属性,所以这里真正发生了什么?

为C ++对象生成的getter和setter是什么样的?

1 个答案:

答案 0 :(得分:1)

assign限定符只是告诉编译器生成一个赋值语句,而不会进入Objective-C的内存管理方面,因此operator=()不会被调用。如果您需要调用它,请覆盖设置器并自行完成。对于atomic限定符,编译器应生成带有签名

的特殊内联函数
void objc_copyCppObjectAtomic(void *dest, const void *src, void (*copyHelper) (void *dest, const void *source));

它只是一个原子设置器,默认情况下为对象执行安全指针分配,但它可以given a new handler非常容易地支持自定义分配。

链接器错误是旧版clang中的一个错误,它阻止了编译器找到并内联特殊的setter函数。