我现在已经制作了几个月的iPhone应用程序,但我还是不太了解自己做了什么。我知道它是一个指向接收器的指针,但这并没有真正告诉我什么。我想如果有人告诉我一个例子,当我应该使用它并解释如果我不使用它会发生什么,我会更加理解。我只使用self来调用方法。
[self myMethod]
// calling a method
第三个也是最后一个问题:对于期望属性和方法,我可以称之为self吗?
答案 0 :(得分:3)
在类方法中,self
是指向类的指针。
在实例方法中,self
是指向类的实例化对象的指针。
让我们关注后者,因为它是self
的最常见用途。
假设我们有一个Box
课程。当我们想以编程方式表示一个框时,我们实例化Box
类的实例:
Box *myBox = [[Box alloc] init];`
现在,我们可以像我们一样实例化多个盒子实例。
Box *greenBox = [[Box alloc] init];
Box *redBox = [[Box alloc] init];
Box *blueBox = [[Box alloc] init];
现在,在Box
类中,我们将有实例方法。这些是在Box
的实例化对象上调用的方法。例如:
[greenBox someMethod];
[redBox someOtherMethod];
但是这是一个外部引用了一个想要在特定Box引用上调用方法的框。
当Box对象需要自己调用方法时,它使用self
作为对自身的引用。
所以,让我们说当在Box对象上调用someMethod
时,作为someMethod
的一部分,Box对象需要在自身上调用方法doStuff
。 / p>
所以在Box.m
,我们可能会:
- (void)someMethod {
// doing actual stuff, then calling a method to do stuff
[self doStuff];
}
self
是此文件中的另一种方法,我们会在发送someMethod
邮件的对象上调用它。
这就像外面的来电者说[greenBox doStuff];
。
但我们可以通过其他方式使用self
。
我们可以使用self
来访问对象的属性。例如,请在Box.h
,
@property BOOL canDoStuff;
现在回到someMethod
:
- (void)someMethod {
// doing actual stuff then...
if (self.canDoStuff) {
[self doStuff];
}
}
我们也可以使用self
作为方法参数。例如:
- (void)someMethod {
// doing actual stuff then...
if (self.canDoStuff) {
[BoxHelperClass doStuffWithABox:self];
}
}