我一直在玩客观C,我发现它是一种很棒的语言..
来自C#我发现指针有点难,但现在我理解这个概念以及如何使用它们。
即:
MyObject* x = [[myObject alloc] callinitializer];
在堆上创建一个新对象,在堆栈上创建一个指针..
但有人可以解释为什么要访问您执行此操作的对象属性:
[x setsomeprop: @"I Like Pizza"];
而不是:
[*x setsomeprop: @"With Pineapple"];
没有解引用星的我们只是使用指针而不是对象本身??
Confuesd!
谢谢
丹尼尔
答案 0 :(得分:6)
没有。括号语法是专门用于对象的语言功能 - 它会自动取消引用指针。
答案 1 :(得分:0)
部分原因是方法调度在Objective-C等动态语言中的运行方式。在Objective-C中使用解除引用的对象指针几乎没有任何用处。
鉴于所有对象都存储在堆上,并使用retain / release(或通过垃圾收集)管理自己的生命周期,指向对象的指针正是您想要在99%的情况下使用的。
事实证明,在C#和Java中使用的机制基本相同 - 对象引用是指针,这就是为什么将一个引用分配给另一个引用使它们指向同一个对象,而不是复制对象。