1

私は長い間、自分自身をガベージ コレクションの俗物だと考えてきました。秘密裏に C++ を愛しているにもかかわらず、選択肢が与えられたときにガベージ コレクションを使用せずに言語を積極的に使用する開発者を冷笑していることに気づきました。

そしてObjective-Cに出会いました。わお!その参照カウントのシステムは見事にシンプルに見えます – 私はエレガントとさえ言えます. OSX 向けに開発する場合、開発者にはおしゃれな GC を使用するオプションが与えられます。iOS 向けに開発する場合、開発者は参照カウントに行き詰まります。

私の質問は:

iOS に移植される可能性のある OSX アプリケーションを開発している場合、Objective-C の参照カウント システムは、アプリケーションの最初のバージョンで無視することを保証するのに十分な (開発およびバグ修正に関して) 時間がかかりますか?

悪魔のように複雑な循環データ構造を構築するほど賢くないと仮定して、参照カウント*に頼ると、どのような問題に遭遇する可能性がありますか? のような機能を使えばautoreleaseすべてがとても簡単に思えますが、もしこれが本当なら、Apple がガベージ コレクタの作成に労力を費やさなかったことを私は知っています。何に気をつければいいですか?

retain* s とsをいじっていても、ガベージ コレクターを使用できることは承知してreleaseいます (それらは無視されます)。ただし、GC 以外のアプリケーションがRAIIretainを使用することが多いことを考えると、世代別 GC がandへの呼び出しを「置き換える」場合、それがどのように機能するかわかりませんrelease。リソースのリリースが遅れる可能性はありませんか?

4

1 に答える 1

1

iOSに移植するコードを開発した私の経験では、GCのみのコードを取得し、それを参照カウントにバックポートすることは、少し面倒で時間がかかり、エラーが発生しやすい可能性があります。そうは言っても、プロパティを可能な限り使用し(GCに違いがない場合でもプロパティを保持する)、静的アナライザーのビルドフェーズを有効にする限り、それほど悪くはありません。静的アナライザーは、メモリ管理ルールを順守するためにほとんどの障害をキャッチします。deallocでivarのリリースに失敗しても気付かれませんが、すべてのdeallocメソッドを調べて体系的に追加することができます。

MacアプリケーションをiPhoneに直接移植することはできないことに注意してください。MVCのVC部分は完全に書き直す必要があるため、ガベージコレクション専用にMac UIを記述し、モデルクラスのみを互換性のあるものにすることができます。 GCと参照カウントの両方を使用します。

于 2011-01-05T10:08:34.267 に答える