在Objective-C中,id
与C中的void*
具有相似的性质,因为它们都允许你间接访问对象。在Objective-C中,id
是一个占位符类型名,用于表示任何对象类型,无论是基本的int
类型,还是自定义的对象类型。id
的声明如下:
typedef id (*Selector)(id, SEL);
在C中,void*
是一个通用指针类型,它可以指向任何类型的数据。在Objective-C中,void*
通常用于将对象传递给函数,或者作为函数的返回值。void*
的声明如下:
typedef void* VoidPtr;
在Objective-C中,程序在方法调用期间使用SEL
类型来告诉类。SEL
是objc_selector
宏定义的类型,它表示一个方法选择器。SEL
的声明如下:
typedef id (*SEL)(id, SEL, ...);
在Objective-C中,方法调用是通过传递一个指向方法的指针来实现的。这个指针就是SEL
类型。在方法调用期间,SEL
类型被指定为方法名前面的类型,方法名后面的类型则是id
类型。例如,在下面的代码中,foo
是一个指向foo:
方法的指针:
id obj = [MyClass new];
SEL selector = @selector(foo:);
[obj foo:123];
在这个例子中,foo:
方法名前面的类型是SEL
类型,方法名后面的类型是id
类型。因此,foo
是一个指向foo:
方法的指针,它的类型是SEL
。在方法调用期间,SEL
被指定为@selector(foo:)
,因此foo
方法被调用,并将123
作为参数传递。
在Objective-C中,方法调用期间使用的指针类型是SEL
,而不是id
。这是因为SEL
类型提供了更多的运行时信息,可以提供更好的调试和优化。
领取专属 10元无门槛券
手把手带您无忧上云