LoginSignup
11
10

More than 5 years have passed since last update.

self.hogehogeと_hogehogeの違いについて @propertyの話

Posted at
Sample.h
@property(nonatomic) int hogehoge;

@propertyの宣言をした場合、
Sample.mからこのプロパティにアクセスする方法は、
self.hogehoge = (値);
_hogehoge = (値);
という2通りの方法があります。

どちらの方法でも使い方はほぼ一緒ですが、少しだけ違いがあります。
それは、値を変更したときにオーバーライドしたセッターが呼ばれるかどうかです。

すなわち、
self.hogehoge = (値);
のようにして値の変更を行った場合は、以下のメソッドが呼ばれます。

Sample.m
-(void)setHogehoge:(int)hogehoge{
    _hogehoge = hogehoge;
}

それに対して、
_hogehoge = (値);
の場合は、上記のメソッドは呼ばれません。

従いまして、プロパティの値の変更に伴い何らかの処理を行いたいときには、
self.hogehoge = (値);
を用いるのはアリかと思います。
例えば、

Sample.m
-(void)setHogehoge:(int)hogehoge{
    if(hogehoge > 5){
        hogehoge = 5;
    }
    _hogehoge = hogehoge;
}

とすることで、hogehogeの値が5より大きくならないようにすることが可能です。

また、

Sample.m
-(void)setHogehoge:(int)hogehoge{
    NSUserDefaults *uD = [NSUserDefaults standardUserDefaults];
    [uD setInteger:hogehoge forKey:@"HogeKey"];
    _hogehoge = hogehoge;
}

と書くことで、値の変更時に保存処理を行うことができます。

11
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
10