プロパティよりもivarに別の名前を付けることの利点は、どちらかにアクセスしているときにコードで簡単に確認できることです-Andre K
「コメント」ボタンが見つからないため、「回答」として投稿する必要があります。
アンドレのコメントを拡張したかっただけです-合成されたプロパティとバニラ変数をいつ使用しているかを知ることで、(特にセッターの場合)変数が素敵なセッターのおかげで自動的に保持/コピー/解放されるときと手で操作します。
もちろん、あなたが正しいことをしているなら、あなたはおそらくオブジェクトを適切に保持/解放するためにセッターの助けを必要としないでしょう!ただし、デフォルトの合成セッター/ゲッターの代わりにカスタムセッター/ゲッターを使用している場合など、 ivarをself.ivar
代わりに参照すると役立つシナリオもあります。_ivar
おそらく、プロパティを変更するたびに、NSUserDefaultsにも保存する必要があります。したがって、次のようなコードがある可能性があります。
@interface SOUserSettings : NSObject {
BOOL _autoLoginOn;
}
@property (nonatomic, assign) BOOL autoLoginOn;
@end
@implementation SOUserSettings
@synthesize autoLoginOn = _autoLoginOn;
- (void)setAutoLoginOn:(BOOL)newAutoLoginOnValue {
_autoLoginOn = newAutoLoginOnValue;
[[NSUserDefaults standardUserDefaults] setBool:_autoLoginOn forKey:@"UserPrefAutoLoginOn"];
}
@end
注:これは単なる例示的なコードであり、何千もの問題がある可能性があります。
したがって、コードに次のような行がある場合は、_autoLoginOn = YES
NSUserDefaultsに保存されないことがわかりますが、使用する場合は、self.autoLoginOn = YES
何が起こるかが正確にわかります。
との違いは_autoLoginOn
、self.autoLoginOn
単なるセマンティックではありません。