首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在Objective C中,"id"与C中的"void*"相同,以及程序在方法调用期间如何告诉类?

在Objective-C中,id与C中的void*具有相似的性质,因为它们都允许你间接访问对象。在Objective-C中,id是一个占位符类型名,用于表示任何对象类型,无论是基本的int类型,还是自定义的对象类型。id的声明如下:

代码语言:objective-c
复制
typedef id (*Selector)(id, SEL);

在C中,void*是一个通用指针类型,它可以指向任何类型的数据。在Objective-C中,void*通常用于将对象传递给函数,或者作为函数的返回值。void*的声明如下:

代码语言:objective-c
复制
typedef void* VoidPtr;

在Objective-C中,程序在方法调用期间使用SEL类型来告诉类。SELobjc_selector宏定义的类型,它表示一个方法选择器。SEL的声明如下:

代码语言:objective-c
复制
typedef id (*SEL)(id, SEL, ...);

在Objective-C中,方法调用是通过传递一个指向方法的指针来实现的。这个指针就是SEL类型。在方法调用期间,SEL类型被指定为方法名前面的类型,方法名后面的类型则是id类型。例如,在下面的代码中,foo是一个指向foo:方法的指针:

代码语言:objective-c
复制
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类型提供了更多的运行时信息,可以提供更好的调试和优化。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

领券