2

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

次のようなプロパティ宣言を使用して、カテゴリインターフェイス内で少し実験しました。

@property NSString* details;

これにより、コンパイラの警告が発生します(デフォルトの割り当て属性が気に入らなかった)。

プロパティに直接関連付けられたivarがないため、retainまたはcopyの属性を追加しても意味がありません。

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

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

コードをコンパイルして実行しました。ドット表記を使用してメソッドをテストしました。アクセサーはエラーなしで、コンパイラーが文句を言わずに正常に使用できることがわかりました。

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

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

4

1 に答える 1

2

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

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

set<uppercase name>:同様に、オブジェクトで使用可能なフォームの引数が 1 つのメソッドがある場合、コンパイラはドット構文式を左辺値であるかのように使用できるようにします。

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

その名前が@property構文で宣言されていなくても。

何とか、何とか、あなたはすでにそれを知っていたと思います。現時点で掘り下げることができる唯一の関連ドキュメントは、TOCPLからの次の文です。

ただし、オブジェクトで使用すると、ドット構文は「シンタックス シュガー」として機能し、コンパイラによってアクセサー メソッドの呼び出しに変換されます。

于 2012-05-01T18:16:10.077 に答える