1

以下は、Apple 独自の SimpleStocks サンプル コードからの 2 行のコードです ( APLSimpleStockView.m) 。

NSInteger dataCount = [self.dataSource graphViewDailyTradeInfoCount:self];
NSArray *sortedMonths = [self.dataSource graphViewSortedMonths:self];

上記の最初のコード行は、「dataSource」がメッセージの受信者であるように見えますgraphViewDailyTradeInfoCount:self(これは を返しますNSInteger)。

上記のコードの 2 行目は、"dataSource" がメッセージの受信者になっているように見えますgraphViewSortedMonths:self(これは を返しますNSArray *)。

私が見つけることができるdataSourceへの唯一の参照(でAPLSimpleStockView.h)は、オブジェクト/クラスのインスタンスではなく、プロパティですか?プロパティにメッセージを送信できるのはなぜですか? プロパティの値の取得と設定しかできないと思っていましたか?

コードの最終結果は、行 1 の後dataCountに数字が含まれ、行 2 の後sortedMonthsにソートされた月名の配列が含まれることです。dataSourceしかし、メッセージが送信されたときに何かが返されるサンプルの場所が見つからないため、この動作はどこから来たのでしょうか。

self.dataSourceここでゲッターとセッターの両方として機能していますか?

4

2 に答える 2

0

プロパティにメッセージを送信できるのはなぜですか?

プロパティは、指定された名前のアクセサー メソッドを提供するという単なる約束です。プロパティが の場合foo、アクセサは通常-foo-setFoo:です。したがって、この場合、self.dataSourceメッセージを受け取るオブジェクトを返します。

インターフェイスを見るとAPLSimpleStockView、プロパティがオブジェクトへのポインターとして宣言されていることがわかります。

@property (nonatomic, weak) IBOutlet id<APLSimpleStockViewDataSource> dataSource;

これは、プロトコルを実装dataSourceするid(つまり、オブジェクトへのポインター) であることを意味します。APLSimpleStockViewDataSourceまた、Interface Builder で設定できるようにアウトレットとしてマークされています。したがって、ビューのデータ ソースを参照する (再びオブジェクト ポインター) をself.dataSource返します。id

ここで「self.dataSource は getter と setter の両方として機能していますか?

いいえ、データ ソース オブジェクトを返すゲッターにすぎません。

于 2013-05-23T19:41:26.170 に答える