如何使用自我以及何时使用它?

时间:2014-03-29 18:23:04

标签: objective-c oop

我现在已经制作了几个月的iPhone应用程序,但我还是不太了解自己做了什么。我知道它是一个指向接收器的指针,但这并没有真正告诉我什么。我想如果有人告诉我一个例子,当我应该使用它并解释如果我不使用它会发生什么,我会更加理解。我只使用self来调用方法。

[self myMethod]
// calling a method

第三个也是最后一个问题:对于期望属性和方法,我可以称之为self吗?

1 个答案:

答案 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];
    }
}