有人可以解释。和 - >在目标c?

时间:2013-05-06 09:45:38

标签: objective-c

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

    @interface RootViewController : UITableViewController {
        BOOL isSearchOn; 
    }

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

4 个答案:

答案 0 :(得分:2)

点操作符.用于访问property

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

所以你使用

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

您也可以跳过self->

来使用这种方式
    isSearchOn = NO; 

答案 1 :(得分:2)

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

当应用于指针箭头时,运算符相当于将点运算符应用于pointee(ptr->字段相当于(* ptr).field)

pSomething-> someMember

相当于

(* pSomething).someMember

答案 2 :(得分:0)

。当你有一个对象并想要引用属性或方法时使用,而你必须使用 - >只握住指针时。而不是使用 - >你也可以去*。但我猜你在任何情况下都应该阅读C中的指针。

答案 3 :(得分:0)

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

在C中,.->执行相同的操作 - 它们从结构中检索值 - 但-自动取消引用指向结构的指针,因此以下两个表达式是当量:

(*a).b
a->b

第二个操作符只是语法糖。但重要的是,.在应用于指针时没有任何意义 - 您必须使用->

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

因此,您可以在对象上使用.来检索在@property接口中定义的属性,但是您需要使用->直接检索ivars(实例变量),你的例子就是isSearchOn。但是,通常更好的做法是使用Objective-C中的属性公开变量,而不是使用C&#39 {s} ->运算符直接引用变量。