-1

現在のObjective-Cで参照カウントがどれほどひどく実装されているかに気づいて(ここここを参照)、ばかげた余分な呼び出しなしでC ++shared_ptrとセマンティクスに似たものを提供し、自動的に呼び出される必要があるライブラリがそこにあるに違いないと確信しています(ポインター) 変数がスコープ外になったときweak_ptrretainrelease

これは ObjC で可能ですか? ObjC にはデストラクタがないため、変数がスコープ外になったときに自動的に何かを呼び出す方法がないことはわかっていますが、これらのretain/release呼び出しが本当に必要になるのはなぜでしょうか? 私はこれを間違った方法で回避していますか?

4

2 に答える 2

9

現在の Objective-C での参照カウントの実装がいかに悪いかに気付きました...

私はそれを問題視します。それ悪く実装されていません。それはあなたがそれに慣れていないだけです。 知っておくべきルールがいくつかあるだけなので、とても簡単だと思います。なじみがないからといって、ノックしないでください。

これは ObjC で可能ですか?

はい、可能です。これは ARC (「自動参照カウント」) と呼ばれます。詳細については、「ARC リリース ノートへの移行」を参照してください。

ObjC にはデストラクタがないことを知っています

実際、そうです。それが-dealloc方法です。

...変数がスコープ外になったとき

Objective-C について理解しておくべきことは、オブジェクトはヒープ上にのみ割り当てることができるため、オブジェクトは範囲外に出ないということです (<コピーされないブロックに関する通常の注意事項をここに挿入>)。これらのオブジェクト (つまり、変数) へのポインターはスコープ内外に移動できますが、ヒープは技術的にはスコープ内でグローバルと見なされるため、オブジェクト自体は常にスコープ内にあります。(オブジェクトのアドレスを失うと、それを再び見つけることはほぼ不可能です)

于 2012-05-27T01:01:30.100 に答える
2

それはARCによって処理されます。ARC 以外に、いい方法はありません。C++ ではスタック オブジェクトがあり、割り当て (=) と参照 (->) をオーバーロードできます。共有ポインタには両方が必要です。Niether は Objective C で実行できます。

于 2012-05-27T01:01:47.290 に答える