为什么[Object DoSomething]而不是[*Object DoSomething]?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (23)

为什么[Object DoSomething]而不是[*Object DoSomething]?

提问于
用户回答回答于

从类型的定义开始

typedef struct objc_object {
    Class isa;
} *id;

也就是说,一个id指向第一个字段为Class类型的结构的指针

@interface NSObject <NSObject> {
    Class   isa;
}

考虑这两个变量之间的差异:

NSRect foo;
NSRect *bar;
NSArray foo;
NSArray *bar;

例如,以下两行代码是相同的:

[myArray objectAtIndex: 42];
objc_msgSend(myArray, @selector(objectAtIndex:), 42);

类似地,这样声明的方法:

- (id) objectAtIndex: (NSUInteger) a;

等于如下声明的C函数:

id object_at_index(id self, SEL _cmd, NSUInteger a);

然后,看着objc_msgSend(),第一个参数声明为类型。id:

OBJC_EXPORT id objc_msgSend(id self, SEL op, ...);
用户回答回答于

你不应该真正将它们看作指针到对象

Objective-C首先在本书中提出并讨论

请注意,在本书中,所有对象都是给定类型的id。你根本没有看到Object *书中更具体的东西; 当我们谈论“为什么”时,这些只是抽象中的泄漏。以下是这本书所说的内容

扫码关注云+社区