2011-12-08 27 views
6

iOS 5では、「保持」と「リリース」はもうサポートされていません。代わりに、「強」と「弱」が新しい方法です。iOS5 @property changes

IOSの4コード:

@property(nonatomic, retain) 
@property(nonatomic, assign) 

IOSの5コード:

??? 
??? 

答えて

12

"IOSの5では、放出を維持するが、それ以上サポートされていません。"彼らはARCを使っている時だけではありません。

ARCを使用する場合、-[<NSObject> retain]はノーオペレーションです。

プロパティの場合、ARCを使用する場合はstrongを使用できますが、これは必須ではありません(ご希望の場合はretainも使用できます)。 strongretainは同じです:

@property(nonatomic, strong) 
@property(nonatomic, assign) 

ちょうどあなたが(同じプロジェクトにstrongretainの両方を使用していない)一致していることを確認してください。

+0

ところで、Objective-Cチームは古いコードと下位互換性があるとこれをしました。 –

+0

strong/retainの両方を併用しない重大な理由はありますか?読みやすさの問題ですか? –

+0

@craigです。 ARCを初めて使う人には混乱を招くかもしれないと思います。 –

5

彼らはまったく同じではありませんが、基本的retain := strongassign := weak 私は、オブジェクトが別のスレッドがこのオブジェクトにアクセスしようとした場合を意味しているスレッドセーフではありませんARC Release notes

+3

実際、 'assign'は' weak'より 'unsafe_unretained'に近いです。脆弱なプロパティの割り当ては新しい概念です。 –

+2

また、intなどのプリミティブ型ではweakが機能しないことにも注意してください。あなたは割り当てを使用する必要があります。 –

4

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

の「宣言されたプロパティ」セクションを読んであなたは少し...