Objective c 目标C_下划线vs自变量
我知道以前有人问过这个问题,但可能不是在同一个背景下。我的问题是,我有一个单例类,在应用程序的生命周期中只有一次。在这个类中,我有一些方法正在访问实例变量,如果它们已经在实例上设置好,那么这些方法将执行操作。这是我如何尝试访问它们的示例: //.m文件: 接口:Objective c 目标C_下划线vs自变量,objective-c,Objective C,我知道以前有人问过这个问题,但可能不是在同一个背景下。我的问题是,我有一个单例类,在应用程序的生命周期中只有一次。在这个类中,我有一些方法正在访问实例变量,如果它们已经在实例上设置好,那么这些方法将执行操作。这是我如何尝试访问它们的示例: //.m文件: 接口: @property (nonatomic, assign, readwrite) BOOL userLoggedIn; 实施: //方法: -(void)someMethod{ if(!_userLoggedIn){
@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{}
,则可能会改变行为。ifuserLoggedIn
的可能重复项仅定义为在实现中使用,并且您使用的是对变量的直接访问,您申报财产有什么原因吗?为什么不使用一个实例变量(如@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方法。