什么是区别 - >并且。在Objective-C

时间:2016-02-29 18:50:10

标签: objective-c

我是Objective-c的新人 在编码期间,我遇到了像self-gt; address和self.name
这样的代码 1)什么是 - >和。 (他们是经营者或其他东西)
2)他们之间有什么区别 3)如何决定使用哪一个

如果可能的话请举个小例子

3 个答案:

答案 0 :(得分:1)

  

什么是fdai0000x = [[4], [6, 4, 9], [4, 6], [0], []] reduce(lambda x,y: (len(x) + len(y)) if isinstance(x, list) else (x + len(y)), filter((lambda x: len(x) > 1), x)) # result would be 5 (他们是运营商还是别的什么)?

->.都是运算符of the same (highest) precedence

  

他们之间有什么区别?

->采用指针+字段; .采用struct +字段或具有可访问getter的指针+属性。

  

如何决定使用哪一个?

操作的各个方面暗示了这一点,在没有名称冲突的情况下,当两个操作符都可以使用而不会导致编译时错误时,您就不会遇到这种情况。当你有一个指针和一个字段时,使用->运算符;否则,请使用.

答案 1 :(得分:1)

如果您有object.name,则在name上调用名为object的方法。此方法可以访问它随后返回的实例变量,但它是一个方法,因此它可以执行任何编写的操作。 Objective-C合成属性的方法,因此您可能没有实际的Objective-C代码,但这些方法仍然存在并且可以被覆盖。

使用object->name,您可以访问name的实例变量object。这是对object内存的直接访问,因此没有方法调用,也没有任何实现/覆盖。

一般情况下,对于对象,您应该使用object.name来访问该属性,除非有特殊原因不这样做。

注意,当您在对象内部引用实例变量时,它会隐式取消引用self,即nameself->name相同。

答案 2 :(得分:0)

.是用于访问结构成员的运算符。但是,在Objective-C中,它还用于访问类的属性(通过访问器)。因此,在您的示例中,self.name用于访问您班级中名为name的媒体资源。

->是来自C的解除引用运算符。它用于通过指向它的指针访问结构的成员。在Objective-C中,它还可以用于访问类的成员。在您的示例中,self->address用于访问您班级中名为address的成员变量(所谓的ivar)。

看看this answer