2015-01-06 7 views
5

私はこのようなプロパティしている場合:プロパティのメモリ管理がクラス拡張で再定義されていれば変更できますか?

//test.h 

@interface test 
@property (nonatomic, readonly, weak) NSObject x; 
@end 

は、読取り/書込みするために実装ファイルで再定義:

// test.m 
@interface test() 
@property (nonatomic, readwrite) NSObject x; 
@end 

、私は.hの中で弱い使用されるが、私は拡張子に何も言いませんでしたプロパティは '弱い'指定子を保持するのだろうか、それとも '強い'に変わるだろうか?

プロパティが再定義されたときにstrong/assign/weakキーワードが上書きされますか?

+0

私はよく、クラス拡張のプロパティの 'strong/weak/assign'属性を指定します。読み取り専用の公開宣言では不要です。 – rmaddy

+0

@rmaddy - '.h'で' readonly'を宣言し、 '.m'でクラス拡張の' readwrite、weak'を宣言すると、Xcode 5.1の下で、「クラスプロパティの宣言が暗黙のうちに、 .1。しかし、拡張子に 'strong'や' assign'を含めてもコンパイラの怒りは増えません。それ以降のコンパイラはこれを変更しましたか? – CRD

+0

@CRD Hmmm。私は「弱い」性質でそれをしていないと思う。知っておいてよかった。 – rmaddy

答えて

5

Xcode 5.1.1の簡単なテストでは、weak属性が保持されていることがわかります。 assignstrongの属性についても同じことが言えます。.mに含める場合は、.mの属性を.hに指定し、それらを省略することができます。

これは言いましたが、どこに文書化されているかわかりません。しかし、Objective-Cのセマンティクスはどこでも正式には定義されていません。あなた自身の責任において使用してください。

おすすめ:それを繰り返してください。

+0

属性が設定されているかどうかチェックする方法は?私はこれらのことを確認する方法を見つけようとしています。ありがとう! – Wingzero

+0

コンパイル時に '.h'を読みます。実行時にはドキュメントの 'property_getAttributes'関数を参照してください。 – CRD

関連する問題