Objective c 目标C_下划线vs自变量

Objective c 目标C_下划线vs自变量,objective-c,Objective C,我知道以前有人问过这个问题,但可能不是在同一个背景下。我的问题是,我有一个单例类,在应用程序的生命周期中只有一次。在这个类中,我有一些方法正在访问实例变量,如果它们已经在实例上设置好,那么这些方法将执行操作。这是我如何尝试访问它们的示例: //.m文件: 接口: @property (nonatomic, assign, readwrite) BOOL userLoggedIn; 实施: //方法: -(void)someMethod{ if(!_userLoggedIn){

我知道以前有人问过这个问题,但可能不是在同一个背景下。我的问题是,我有一个单例类,在应用程序的生命周期中只有一次。在这个类中,我有一些方法正在访问实例变量,如果它们已经在实例上设置好,那么这些方法将执行操作。这是我如何尝试访问它们的示例:

//.m文件:

接口:

@property (nonatomic, assign, readwrite) BOOL userLoggedIn;
实施: //方法:

-(void)someMethod{
    if(!_userLoggedIn){
    } 
    else {
    }
}
我知道我也可以使用self来评估如下价值:

-(void)someMethod{
    if(self.userLoggedIn){
    } 
    else {
    }
}
想知道访问值的正确方法是什么?我不是在合成属性,因为它们都是在接口中声明的,只在.m文件中声明。谢谢你的帮助

视情况而定

是否要调用访问器<代码>\变量是直接访问
self.variable
调用编译器自动合成的
-variable

前者在值更改时不会触发KVO。后者确实如此。这可能是特性或反特性

但是,无论您选择哪一种,尤其是对于写操作,都要保持一致,否则您将在将来跟踪bug


一般规则:

  • 在-init/-dealoc中直接访问

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


还要注意的是,直接访问将不尊重原子性,这取决于它

是否要调用访问器<代码>\变量是直接访问
self.variable
调用编译器自动合成的
-variable

前者在值更改时不会触发KVO。后者确实如此。这可能是特性或反特性

但是,无论您选择哪一种,尤其是对于写操作,都要保持一致,否则您将在将来跟踪bug


一般规则:

  • 在-init/-dealoc中直接访问

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



还请注意,直接访问将不尊重原子,这取决于它,但如果实现了
-(BOOL)userLoggedIn{}
,则可能会改变行为。if
userLoggedIn
的可能重复项仅定义为在实现中使用,并且您使用的是对变量的直接访问,您申报财产有什么原因吗?为什么不使用一个实例变量(如
@implementation{BOOL userLoggedIn;}…
?这取决于具体情况,但如果您有
-(BOOL)userLoggedIn{}
implemented,这可能会改变行为。如果
userLoggedIn
的可能重复项仅定义为在实现中使用,并且您使用对变量的直接访问,那么您声明属性有什么原因吗?为什么不只使用实例变量(如
@implementation{BOOL userLoggedIn;}…
?非常感谢!调用或未调用变量是什么意思?@randomorb2110
\u variable=10;
直接设置实例变量。
self.variable=10;
转换为
[self-setVariable:10]
。一个是直接写入,一个调用setter方法。非常感谢!调用或不调用变量是什么意思?@randomorb2110
\u variable=10;
直接设置实例变量。
self.variable=10;
转换为
[self-setVariable:10]一个是直接写入,一个调用setter方法。