2011-10-18 3 views
3

ARCでは、すべてのIBOutletをプロパティにするのは何ですか?ビューコントローラによって内部的にのみ使用されるIBOutletsにivarsを使用することの欠点は何ですか?ARCの下でIBOutletsのプロパティを使用することの有用性は?

+0

なぜあなたはプロパティを作成する必要があると思いますか? – Phlibbo

+0

@Phlibbo:私はここで、「良い習慣」であり、viewDidUnloadコードを簡素化することを見ています。 –

+0

Scott MeyersとHerb SutterがC++で書いたものに似た「Effective iOS」の本があったらいいのに。 –

答えて

8

setter/getterメソッドを何も使用しない場合は、それらのプロパティのキー値監視に頼らず、サブクラスがこれらのプロパティをオーバーライドすることで利益を得られることを期待しないでください。 ARCの下でIBOutletsにivarsを使用することに欠点があります。

+0

ありがとうございます、ivarsは私のコードで 'self.'という接頭辞をたくさん削除します。 –

+0

私の答えをチェックして、何が起こっているかについての洞察があれば教えてください。 –

0

私は私の "プライベート" IBOutletsにivarsを使用していて、メモリリークの問題が発生しました。 IBOutletsが__weakの代わりに__unsafe_unretainedという属性を使用していたためです。 __weakはiOS 4でサポートされていないため使用できません(私のアプリはiOS 4と下位互換性があります)。 ARC、IBOutlets、viewDidUnloadなどで実際に何が起きているのか把握するのは難しいです。一口...

とにかくIBOutletsをivarsからプロパティに変更したときに、メモリリークの問題が解消されました。

私自身の質問に答えるために、IBOutletsにivarsを使用することの1つの欠点は、__unsafe_unretained属性を持つ場合、メモリリークが発生する可能性があることです。

+0

これが漏れの原因であるとは思われません。あなたの店舗が「__unsafe_unretained」だった場合、定義上、それらのイナールは目標を保持しておらず、何も保持していないと漏れを引き起こすことはありません。あなたが追加したプロパティが同様に 'unsafe_unretained'であったかどうかを指定しなかったのですが、いずれの方法でも、プロパティを追加することで可能なのは、* more * retainの原因になります。詳細がなければ、あなたがなぜ漏れているのかは分かりません。本当に好奇心が強い場合は、別の質問を提出することもできます。 –

+0

私が追加したプロパティは実際には 'unsafe_unretained'でした。私は実際にIBOutletsをivarsからプロパティに変更することで何が変わったのか、本当に困惑しています。たぶん私はXCodeの楽器を正しく解釈していないだろう。 –

+0

unsafe_unretainedを実行するとクラッシュする可能性がありますが、リークは発生しません。私はあなたがインストゥルメンツを間違って解釈していると思いますごめんなさい。 :)しかし、それは何ヶ月もされている:あなたは何が起こっているかについての余分な洞察力を持っていますか? –

関連する問題