1

このコードは Big Nerd Ranch iOS Programming book から引用しました。コードでは、2 つのインスタンス変数coordinatetitle. なぜcoordinate直接割り当てられtitle、セッターを呼び出すことによって設定されるのですか?

ヘッダー ファイル

@interface BNRMapPoint : NSObject<MKAnnotation>

  -(id)initWithCoordinate:(CLLocationCoordinate2D )c title:(NSString *)t;

  @property(nonatomic, readonly) CLLocationCoordinate2D coordinate;
  @property(nonatomic, copy)  NSString *title;

@end

実装ファイル

-(id)initWithCoordinate:(CLLocationCoordinate2D)c title:(NSString *)t
{
    self = [super init];
    if(self){
        coordinate = c;
        [self setTitle:t];
    }
    return self;
}
4

2 に答える 2

1

2 つの理由のうち最も重要なものは、coordinateプロパティのセッターがないことです。読み取り専用として宣言されているため、getter メソッドのみが生成されます。

2 つ目はCLLocationCoordinate2D、オブジェクトではなく構造体です。オブジェクトに対して実行する必要があるメモリ管理アクション (この場合はコピー) がありtitleます。これを実現する最も簡単な方法は、既存の setter メソッドを使用することです。コンパイラは、 のような POD タイプのデータの移動を処理しますCLLocationCoordinate2D

ただし、2 番目の理由が唯一の理由である場合、これは適切な決定とは言えません。一方のプロパティにセッターを使用し、他方のプロパティには使用しないというのは不適切なスタイルです。

于 2012-09-09T21:16:19.527 に答える
0

NSStrings をコピーする必要があるという考え方があります。そのコピーを取得するために、文字列のセッターを呼び出しています。ただし、Josh が指摘しているように、座標をコピーする (または保持する) 必要はありません。

于 2012-09-09T21:18:35.287 に答える