8

Big Nerd Ranch iOS 5 book (p.73) と Programming iOS 5 book (O'Reilly, p.314) (updadte: Kochan's Objective-C book Fourth edition)で、ARC のコンテキストで、 properties 属性のデフォルトはassign... だと言いますが、 Apple のドキュメントによると、デフォルトは ですstrong

を指定しないstrongとプログラムは正常に動作し、 を指定するstrongと同じように動作し、assign代わりに を使用するとコンパイラは警告を表示するため、デフォルトは実際にはstrong.

ほとんどの場合、

@property (nonatomic, readwrite, strong) NSMutableArray *foo;

それから私たちはただ書くことができます

@property (nonatomic) NSMutableArray *foo;

他の 2 つ (readwritestrong) がデフォルトなので?

4

2 に答える 2

11

readwrite と strong は、実際に ARC* ではデフォルトです。手動参照カウントでは、代入がデフォルトでした。私はこれらを明示的に指定することを好みます。なぜなら、コードを読んでいる人がデフォルト値を知っていることに頼るのではなく、@property のパラメーターが何であるかが明確になるからです。

*strong は、コンパイラにインスタンス変数を合成させるか、明示的な所有権修飾子なしでインスタンス変数を宣言したと仮定した場合のデフォルトです (この場合、いずれにせよ ivar は__strongデフォルトです)。それ以外の場合、デフォルトのプロパティ所有権タイプは、ivar の宣言の所有権修飾子と一致します。したがって、ivar を で明示的に宣言して__weakから、所有権修飾子なしで @property を宣言すると、合成されたプロパティは弱いものになります。これはすべてClang ARC ドキュメントに記載されています。

于 2012-06-14T21:10:16.653 に答える
0

デフォルトでは、オブジェクト プロパティはstrong, atomic, readwriteです。https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/ProgrammingWithObjectiveC/EncapsulatingData/EncapsulatingData.htmlを参照して ください。

于 2015-06-14T21:05:54.043 に答える