self
是个什么样的东西?称它为指针是否正确?或者它是一个变量?或者还有什么?
最佳答案
Objective-C 方法实现实际上只是一个带有两个额外参数的 C 函数。第一个参数是 self
变量,第二个参数是用于调用实现的选择器。第三个和任何后续参数(如果有的话)是您的方法的实际参数。如果您有这样的方法:
@implementation MyClass
- (int) myMethod:(int) anArg
{
NSLog (@"The selector %@ was used.", NSStringFromSelector(_cmd));
return [self someValue] + anArg;
}
@end
那么,大致相当于这样:
// Implementation of MyClass's instance method "myMethod"
int MyClass_myMethod (id self, SEL _cmd, int anArg)
{
NSLog (@"The selector %@ was used.", NSStringFromSelector(_cmd));
return [self someValue] + anArg;
}
不过请记住,调用 C 函数和发送消息是非常不同的。向对象发送消息将导致调用实现,而该实现由运行时决定。由于方法实现是在运行时确定的,编译器不能简单地将所有消息发送与直接函数调用交换。我相信有一些方法可以告诉运行时更改用于给定类的给定选择器的方法实现。
运行时根据self
的类决定使用哪个实现。如果 self
为 nil
,则消息发送是空操作,因此,所有方法实现都将始终具有 self
的有效值它们由运行时调用。
关于iphone - self 是一个指针吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1883973/