Sending '__autoreleasing id *' to parameter of type '__unsafe_unretained id *' changes retain/release properties of pointer
この問題を解決するのにお手伝いできますか?'__unsafe_unretained id *'タイプのパラメータに '__autoreleasing id *'を送信
Sending '__autoreleasing id *' to parameter of type '__unsafe_unretained id *' changes retain/release properties of pointer
この問題を解決するのにお手伝いできますか?'__unsafe_unretained id *'タイプのパラメータに '__autoreleasing id *'を送信
私は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の場合は、を使用してください。