private property vs privateなインスタンス変数

Posted on
Objective-c

外部から隠蔽したい状態を保持するには、privateなpropertyとprivateなインスタンス変数と2通りのやり方があります。

private property

priavateなpropertyclass extensionを使って実装します。

// MyClass.m
@interface MyClass () //class extension
@property(nonatomic, strong) NSString *name;
@end

イニシャライザでは_propertyを、それ以外ではself.propertyを使って参照します。

- (instancetype)init
{
  if(self = [super init])
  {
    _name = @"test";
  }
  return self;
}

- (void)otherPlaces
{
  self.name = @"test";
}

privateなインスタンス変数

// MyClass.m
@implementation
{
  NSString *_name;
}

@end

どこで参照するにも_ivarを使います。

- (instancetype)init
{
  if(self = [super init])
  {
    _name = @"test";
  }
  return self;
}

- (void)otherPlaces
{
  _name = @"test";
}

どちらが良いか?

  1. インスタンス変数だと、代入しても、KVOが呼ばれない
  2. strong以外の修飾子を指定する場合、propertyの方が楽. i.e)copy

以上からプライベートな状態を保持したい場合、private propertyの方が良いと思います。

参考

http://stackoverflow.com/questions/19982735/objective-c-private-variables-vs-private-properties