2011-10-25 11 views
0

初のカスタムクラスの基準、私はARCを使用して、私はカスタムのUIViewControllerへの参照を必要とするカスタムクラスを持っている iOSの - のUIViewControllerオブジェクトの

iOS4を+

をターゲットにしています。 私がmissunderstod何かを持っていない限り、その参照にプロパティ retainを持つことは、私のクラスが破壊するたびに、UIViewControllerも同様に破壊することを意味しますか? それは、UIViewControllerが割り当て解除されるために、(UIViewControllerを作成した)appdelegateと私のカスタムクラスの両方を割り当て解除する必要があるということですか?

私は__unsafe_unretainedのプロパティについても読んでいます。 UIViewControllerを参照するために、私のカスタムクラスで単純にそれを使用できますか? appdelegateは最後にUIViewControllerの割り当てを解除するので、ぶら下がったポインタのリスクはありませんか?

おかげ

EDIT:カスタムクラスそれは

答えて

1

を重要ならば、各オブジェクトは、本質的にそれが周りに固執する必要があるか否かを判断保持カウントを持っているプロセス全体を通じて生きるシングルトンオブジェクトです。この場合、AppDelegateは既にUIViewControllerを保持しています(1の数を保持します)。これは、カスタムクラスがUIViewController(保持数2)を保持できないということを意味しません。つまり、カスタムクラスがUIViewControllerを破棄して解放するとき、保持カウントは1に戻ります。次に、AppDelegateが破棄して解放すると、カウントは0に落ち、オブジェクトは破棄されます。

これをさらに進めるには、カスタムクラスの中にUIViewControllerを保持している別のbult-inまたはカスタムクラスに割り当てた場合は、カウントが上昇し続け、それらの各オブジェクト順番にその関心を発表した。

+0

です。私のカスタムクラスにretainを使用することに欠点はありますか?または__unsafe_unretainをまだ使用する必要がありますか?私は基本的にカスタムクラスでUIViewControllerからメソッド/変数にアクセスしています – KaiserJohaan

+0

あなたはretainを使うべきです。何かを傷つけることはありませんし、あなたのUIViewControllerがあなたのカスタムクラスの寿命の間に破壊されることはありませんが、良い練習です。一般的に、保持数とリリース数が一致していれば(そして循環保持ループを作成していない場合)、大丈夫です。 –

+0

カスタムクラスを使用してUIViewControllerのメソッドや変数にアクセスすると、それらを@synchonrizeで囲む必要がありますか? – KaiserJohaan

関連する問題