为什么一切都是Objective-C中的指针

Wil*_*ham 4 oop objective-c

我来自PHP/Javascript背景,在大多数情况下,事物直接存储在变量中,我们也有对象/类/方法等.这是OOP.

现在我开始学习Objective-C.我理解指针的基础知识.但现在一切都是指针.这是我没有得到的部分.为什么我们不喜欢直接分配的PHP/Javascript?我们仍然在做OOP.

谢谢

小智 7

如果你看看JavaScript和许多其他OO语言的语义(可能包括PHP,但我不确定并且不愿意猜测),你会发现这些语言通过指针提供了与Objective C相同的间接性.实际上,这些语言在内部使用指针.考虑这个(JavaScript)代码段:

function f(obj) {
    obj.x = 1; // modifies the object referred to directly
    obj = {x: 2}; // doesn't affect caller
}
var foo = {x: 0};
f(foo); // passes a pointer/"reference"
// foo.x === 1
Run Code Online (Sandbox Code Playgroud)

它大致相当于(C,因为我不知道Objective C)这样的东西,模数手动内存管理,静态类型等:

struct Obj { int x; };
void f(struct Obj *obj) {
    obj->x = 1;
    obj = ...; // you get the idea
}
struct Obj *foo = malloc(sizeof(*foo));
foo->x = 0;
f(foo);
free(foo);
Run Code Online (Sandbox Code Playgroud)

它只是在Objective C中是明确的,因为该语言是C的超集(100%向后兼容性和互操作性),而其他语言已经废除了显式指针并使得它们需要隐含的间接性.

  • "基于"有点模糊.我经常将其视为C的"严格超集",这可能更准确. (2认同)