Objective C _underscore vs self.variable

时间:2017-01-24 18:53:03

标签: objective-c

我知道之前已经提出过这个问题,但可能不是在同一个背景下。我的问题是我有一个单例类,在应用程序的生命周期中只有dipatched_once。在类中,我有一些方法正在访问实例变量并在它们已在实例上设置时进行操作。这是我试图访问它们的示例:

// .m文件:

接口:

@property (nonatomic, assign, readwrite) BOOL userLoggedIn;

实现: //方法:

-(void)someMethod{
    if(!_userLoggedIn){
    } 
    else {
    }
}

我知道我也可以使用self来评估这样的值:

-(void)someMethod{
    if(self.userLoggedIn){
    } 
    else {
    }
}

想知道哪种方法是正确的访问价值?我没有合成属性,因为它们都只在.m文件中的接口中声明。谢谢您的帮助!

1 个答案:

答案 0 :(得分:5)

取决于。

您是否想要调用访问者? _variable是直接访问权限。 self.variable调用-variable,它由编译器自动合成。

当值发生变化时,前者不会触发KVO。后者确实如此。这可能是一个功能或反功能。

但是,无论您选择哪种,,尤其是写作操作,都要保持一致,否则您将来会追踪错误。

一般规则:

  • 直接访问-init / -dealloc

  • 通过setter / getter(点语法)访问其他地方

另请注意,直接访问不会尊重atomic