iOS 5では、「保持」と「リリース」はもうサポートされていません。代わりに、「強」と「弱」が新しい方法です。iOS5 @property changes
IOSの4コード:
@property(nonatomic, retain)
@property(nonatomic, assign)
IOSの5コード:
???
???
iOS 5では、「保持」と「リリース」はもうサポートされていません。代わりに、「強」と「弱」が新しい方法です。iOS5 @property changes
IOSの4コード:
@property(nonatomic, retain)
@property(nonatomic, assign)
IOSの5コード:
???
???
"IOSの5では、放出を維持するが、それ以上サポートされていません。"彼らはARCを使っている時だけではありません。
ARCを使用する場合、-[<NSObject> retain]
はノーオペレーションです。
プロパティの場合、ARCを使用する場合はstrong
を使用できますが、これは必須ではありません(ご希望の場合はretain
も使用できます)。 strong
とretain
は同じです:
@property(nonatomic, strong)
@property(nonatomic, assign)
ちょうどあなたが(同じプロジェクトにstrong
とretain
の両方を使用していない)一致していることを確認してください。
彼らはまったく同じではありませんが、基本的retain := strong
とassign := weak
私は、オブジェクトが別のスレッドがこのオブジェクトにアクセスしようとした場合を意味しているスレッドセーフではありませんARC Release notes
実際、 'assign'は' weak'より 'unsafe_unretained'に近いです。脆弱なプロパティの割り当ては新しい概念です。 –
また、intなどのプリミティブ型ではweakが機能しないことにも注意してください。あなたは割り当てを使用する必要があります。 –
nonatomic
プロパティの状態を見てみお勧めします悪いことが起きる可能性はありますが、これは原子的性質よりもはるかに速いです。
strong
はARCと一緒に使用され、オブジェクトの保持カウントを心配する必要がないため、基本的に役立ちます。 ARCは、完了したら自動的にリリースします。キーワードstrong
を使用すると、オブジェクトを所有していることを意味します。
weak
所有権は所有していないことを意味します。所有権とは、第2オブジェクトがリリースされるとすぐに価値が失われるように、割り当てられたオブジェクトがオブジェクトになるまで追跡します。たとえば。 obj.a=objectB;
が使用され、aが弱いプロパティを持つ場合、その値はobjectBがメモリ内に残るまでのみ有効です。
copy
プロパティは非常によく、ここでhttps://stackoverflow.com/a/5002646/919545
strong,weak,retain,copy,assign
を説明しますが、1つのオブジェクト上でそれらを使用することはできませんので、相互に排他的です...このことができます願ってhttp://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/ObjectiveC/Chapters/ocProperties.html#//apple_ref/doc/uid/TP30001163-CH17-SW1
の「宣言されたプロパティ」セクションを読んであなたは少し...
ところで、Objective-Cチームは古いコードと下位互換性があるとこれをしました。 –
strong/retainの両方を併用しない重大な理由はありますか?読みやすさの問題ですか? –
@craigです。 ARCを初めて使う人には混乱を招くかもしれないと思います。 –