1. ホーム
  2. objective-c

[解決済み] cocoa objective-cのクラスで変数の前にアンダースコアを付けるとどうなるのでしょうか?

2022-04-26 21:32:23

質問

iPhoneのサンプルで、属性が変数の前にアンダースコア_を使用しているのを見かけました。これはどういう意味か、どなたかご存知ですか?またはどのように機能するのでしょうか?

私が使っているインターフェースファイルは、以下のようなものです。

@interface MissionCell : UITableViewCell {
    Mission *_mission;
    UILabel *_missionName;
}

@property (nonatomic, retain) UILabel *missionName;

- (Mission *)mission;

上記が何をするのか正確にはわからないのですが、ミッション名をこう設定しようとすると

aMission.missionName = missionName;

エラーが出ます。

構造体または共用体でないものに、メンバ 'missionName' を要求しています。

解決方法は?

ivar にアンダースコアの接頭辞を使用する場合 (これは一般的な慣習に過ぎませんが、便利なものです)、 (プロパティ用の) 自動生成アクセッサがどの ivar を使用するかを知るために、1 つの追加事項を実行する必要があります。 具体的には、あなたの実装ファイルの中で、あなたの synthesize は次のようになります。

@synthesize missionName = _missionName;

より一般的に言えば、これは

@synthesize propertyName = _ivarName;