1

所以我真的很好奇不同类型的属性如何与 C++ 对象一起工作。

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

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

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

不过,似乎对 C++ 对象属性进行了一些特殊处理,因为我在编译测试程序时遇到了链接器错误。

Symbol not found: _objc_copyCppObjectAtomic

这是一个分配属性,那么这里到底发生了什么?

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

4

1 回答 1

1

限定符只是告诉编译器生成一个赋值语句,而不涉及assign到 Objective-C 的内存管理方面,所以operator=()不会被调用。如果您需要调用它,请覆盖设置器并自己执行此操作。至于atomic限定符,编译器应该生成一个带有签名的特殊内联函数

void objc_copyCppObjectAtomic(void *dest, const void *src, void (*copyHelper) (void *dest, const void *source));

它只是一个原子设置器,默认情况下为对象执行安全的指针分配,但可以为它提供一个新的处理程序以非常轻松地支持自定义分配。

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

于 2013-06-01T07:36:49.883 回答