0

帮帮我:(我不知道为什么?

    @interface RootViewController : UITableViewController {
        BOOL isSearchOn; 
    }

    self->isSearchOn = NO; ( no error)
    self.isSearchOn = NO; ( error)
4

4 回答 4

2

点运算符.用于访问property.

箭头运算符->用于访问实例变量。

所以你用

    self->isSearchOn = NO; // which is an instance not  a property

您也可以通过跳过来使用这种方式self->

    isSearchOn = NO; 
于 2013-05-06T10:15:33.983 回答
2

-> 是传统的 C 运算符,用于访问由指针引用的结构的成员。由于 Objective-C 对象(通常)用作指针,而 Objective-C 类是一个结构,因此您可以使用 -> 访问其成员,这些成员(通常)对应于实例变量。

或者

应用于指针箭头操作符相当于将点操作符应用于指针对象(ptr->field 等价于 (*ptr).field)

或者

pSomething->someMember

相当于

(*pSomething).someMember

于 2013-05-06T10:16:52.367 回答
0

. 当你有一个对象并且想要引用一个属性或方法时使用,而你必须使用 -> 只持有指针。而不是使用 -> 你也可以去 *. 但我想你无论如何都应该阅读 C 中的指针。

于 2013-05-06T09:48:40.100 回答
0

这里基本上有三个运算符,其中两个是从 C 继承的,第三个是从 Objective-C 继承的。

在 C 中,.->同样的事情——它们从结构中检索一个值——但-会自动取消引用指向结构的指针,因此以下两个表达式是等价的:

(*a).b
a->b

第二个运算符只是语法糖。然而,重要的是,.当应用于指针时没有任何意义——你必须使用->.

Objective-C 允许使用.对象指针(并且只能使用指针,因为所有 Objective-C 对象都是指针)来引用属性值,这是比 C 运算符提供的更高级别的构造。

因此,您可以使用.on 对象来检索接口中定义的属性@property,但您需要使用->直接检索 ivars(实例变量),这isSearchOn在您的示例中。但是,通常更好的做法是使用 Objective-C 中的属性来公开变量,而不是直接使用 C 的->运算符来引用它们。

于 2014-04-18T17:43:09.337 回答