2012-01-10 12 views
3

可能性の重複:
using ARC, lifetime qualifier assign and unsafe_unretained弱い参照プロパティに代わってunsafe_unretained修飾子を割り当てるのはなぜですか?

2の違いは何ですか?

@property(unsafe_unretained) MyClass *delegate; 
@property(assign) MyClass *delegate; 

どちらも非ゼロ化弱参照です。だから、assignの代わりにunsafe_unretainedと読むのが長くて難しくなる理由がありますか?

注:ゼロ調整の参考資料であるweakがあります。しかし、iOS> = 5のみです。

+0

答えはこちらhttp://stackoverflow.com/questions/8397511/using-arc-lifetime-qualifier-assign-and-unsafe-unretained –

答えて

9

プロパティアクセサでは、同じです。この場合、assignのプロパティはunsafe_unretainedにマップされます。しかし、ivar合成を使うのではなく、手動でivarを書くことを検討してください。

@interface Foo 
{ 
    Bar *test; 
} 
@property(assign) Bar *test; 
@end 

このコードはARCでは正しくありませんが、ARCより前は正しくありません。すべてのObj-Cオブジェクトのデフォルト属性は__strongです。これを前進させる適切な方法は次のとおりです。

@interface Foo 
{ 
    __unsafe_unretained Bar *test; 
} 
@property(unsafe_unretained) Bar *test; 
@end 

またはIVAR合成と同じことを書いているだけ@property(unsafe_unretained) Bar *test

だから、本当に、そのちょうど別の方法が、それは別の意図を示しています。

+0

iOS 4でivar合成を使用できますか?それともこのiOS 5のみですか? iVarシンセシスを使用する際に何を心に留めておく必要がありますか? – openfrog

+0

iOS 2.0のすべてのバージョンがこれをサポートしています。 –

関連する問題