2012-05-01 4 views
2

カテゴリにプロパティを作成して、アクセサでドット表記を使用できます。これを行う理由は、NSMangedObjectのプロパティを参照する既存のコードをリファクタリングすることができるためです。次に、外部の呼び出し元とそれに関連するNSManagedObjectプロパティの間にカテゴリアクセサメソッドを配置します。 (私は大規模なプロジェクトを通してドット表記法を使用しているので、現在のドット表記法の使用法をメッセージングと置き換えたくないです。)Objective Cでドット表記を使用するための要件は何ですか?

私は、次のようなプロパティ宣言を使ってカテゴリインターフェース内を少し試しました:
@property NSString* details; 

これは(これはデフォルトの割り当て属性を好きではなかった。)警告コンパイラになり

直接施設に縛ら何IVARがないため、保持またはコピーの属性を追加することには意味がありません。

次に、@property行を除外し、インターフェイスと実装ファイルにアクセサを追加しました。

- (void) setDetails:(NSString*)details; 
- (NSString*) details; 

コードをコンパイルして実行しました。私はドット記法を使ってメソッドをテストしました。アクセサーがエラーなく正しくコンパイラーがコンパイルされずに使用できることがわかりました。

私がドット表記について読んだことは、プロパティをある方法で設定すると、ドット表記法を使用できることです。しかし、私はその要件に合致するプロパティを設定していません。しかし、私はまだドット表記を使うことができるようです。

この方法に問題はありますか?ドット表記アクセサーをいつ、どのように使用できるかを定義する仕様はありますか?

答えて

2

ドット表記が宣言されたプロパティへのアクセスに使用されるものではなく、実際には、コンパイラはあなたが結果に代入していない場合は任意の引数なしのメソッドを使用することができること、それは緩く十分に処理されます。

aString.lowercaseString; 
aNumber.intValue; 
aDict.allKeys; 

aString.string = @"Amazing"; 
aWindow.alphaValue = 0.45; 

でも、もし:オブジェクト上で利用できる形set<uppercase name>:の一引数の方法がある場合

同様に、コンパイラは左辺値であるかのようにあなたは、ドットシンタックス式を使用できるようになります名前はで宣言されていません構文。

あなたはすでにそれを知っていたと思います。私は現時点で掘ることができる唯一の関連文書がTOCPLから、この文である:

オブジェクトを使用する場合は、しかし、の呼び出しに、コンパイラによって変換され-it「シンタックスシュガー」として、ドットシンタックス行為アクセサメソッド。

+0

私は私の質問で言及したように、これが動作することがわかります。しかしこれは仕様によってサポートされていますか?もしそうなら、どこで仕様を見つけることができますか?サポートされていない場合、将来のコンパイラバージョンでコードが破損する危険性があります。 – Jim

+0

すみません、申し訳ありませんが、私は現在ドキュメントを探していますが、前に見たことを思い出すことはできません。 –

+0

はい、私はそれをカバーすると思います。プロパティを前提条件として定義することについては言及していません。そのドット表記だけがコンパイラによってアクセッサメソッドの呼び出しに変換されます。 " (例:[myInstance setValue:10]、[myInstance value])。権威のある情報源を指してくれてありがとう。 – Jim

関連する問題