外部から隠蔽したい状態を保持するには、privateなproperty
とprivateなインスタンス変数と2通りのやり方があります。
private property
priavateなproperty
はclass 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";
}
どちらが良いか?
- インスタンス変数だと、代入しても、KVOが呼ばれない
strong
以外の修飾子を指定する場合、propertyの方が楽. i.e)copy
以上からプライベートな状態を保持したい場合、private propertyの方が良いと思います。
参考
http://stackoverflow.com/questions/19982735/objective-c-private-variables-vs-private-properties