2012-03-03 5 views

答えて

4

私はARCで自分自身をスピードアップしていますが、私は同じエラーがあったので、おそらく私はこれを手伝うことができます。

__unsafe_unretainedは、iOS 4以降をサポートしたい場合に使用します。 iOS 5.0以上の場合は__weakを使用してください。違いは、__weakポインタがゼロになっている点です。つまり、他にオブジェクトへの参照がなく、割り当てが解除された場合、__weakポインタはnilに設定されます。したがって、参照すると、EXC_BAD_ACCESSのクラッシュは発生しません。

ARCのObjective-Cオブジェクトのオブジェクトタイプや修飾子など、他のものと同様に、ライフタイムを指定する必要があります。これは、ARCがretain/release呼び出しを合成する方法を知っているためです。

何も指定しない場合、デフォルトは__strongになります。

これらの有効期間指定子は一致する必要があります。

あなたの場合、__unsafe_unretainedという別のポインタに__strongという1つのポインタを割り当てています。

解決するには、受信ポインタも__unsafe_unretainedに変更してください。これは、ライフタイム指定子をメソッドシグネチャに追加することを意味します。例:

- (void)myMethod:(__unsafe_unretained NSString *)aString 
{  
} 

__unsafe_unretainedは、その名前が示すとおりです。それは安全ではなく、それは保持されていません!だから、あなたはそのオブジェクトをどこか別の場所に安全に保持し、解放された後のこのようなメソッドでは参照しない方がよいでしょう。たとえば、親/子関係などのデリゲートの弱い参照にこれを使用するだけです。それ以外の場合、特にObjective-C ivarsの場合は、を使用してください。

関連する問題