1

So I am really curious as to how different kinds of properties work with C++ objects.

For example say I have a property which I declare like this:

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

How is this object treated when I call the setter method? Is it simply assigned using operator=() thereby allowing the class to copy itself using it's operator=() method?

It seems like there might be some special handing of C++ object properties though, as I ran into a linker error while compiling a test program.

Symbol not found: _objc_copyCppObjectAtomic

This was with an assign property, so what is really going on here?

What do the generated getters and setters look like for C++ objects?

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 の古いバージョンのバグであり、コンパイラがその特別なセッター関数を見つけてインライン化することを妨げていました。

于 2013-06-01T07:36:49.883 に答える