帮帮我:(我不知道为什么?
@interface RootViewController : UITableViewController {
BOOL isSearchOn;
}
self->isSearchOn = NO; ( no error)
self.isSearchOn = NO; ( error)
帮帮我:(我不知道为什么?
@interface RootViewController : UITableViewController {
BOOL isSearchOn;
}
self->isSearchOn = NO; ( no error)
self.isSearchOn = NO; ( error)
点运算符.
用于访问property
.
箭头运算符->
用于访问实例变量。
所以你用
self->isSearchOn = NO; // which is an instance not a property
您也可以通过跳过来使用这种方式self->
isSearchOn = NO;
-> 是传统的 C 运算符,用于访问由指针引用的结构的成员。由于 Objective-C 对象(通常)用作指针,而 Objective-C 类是一个结构,因此您可以使用 -> 访问其成员,这些成员(通常)对应于实例变量。
或者
应用于指针箭头操作符相当于将点操作符应用于指针对象(ptr->field 等价于 (*ptr).field)
或者
pSomething->someMember
相当于
(*pSomething).someMember
. 当你有一个对象并且想要引用一个属性或方法时使用,而你必须使用 -> 只持有指针。而不是使用 -> 你也可以去 *. 但我想你无论如何都应该阅读 C 中的指针。
这里基本上有三个运算符,其中两个是从 C 继承的,第三个是从 Objective-C 继承的。
在 C 中,.
做->
同样的事情——它们从结构中检索一个值——但-
会自动取消引用指向结构的指针,因此以下两个表达式是等价的:
(*a).b
a->b
第二个运算符只是语法糖。然而,重要的是,.
当应用于指针时没有任何意义——你必须使用->
.
Objective-C 允许使用.
对象指针(并且只能使用指针,因为所有 Objective-C 对象都是指针)来引用属性值,这是比 C 运算符提供的更高级别的构造。
因此,您可以使用.
on 对象来检索接口中定义的属性@property
,但您需要使用->
直接检索 ivars(实例变量),这isSearchOn
在您的示例中。但是,通常更好的做法是使用 Objective-C 中的属性来公开变量,而不是直接使用 C 的->
运算符来引用它们。