iOS如何从类方法访问self?

时间:2011-09-16 03:14:43

标签: iphone ios cocos2d-iphone

我想知道如何从类方法中访问self

在这个实例方法中,访问self时没有问题:

- (void) ccTouchesEnded:(NSSet *) touches withEvent:(UIEvent *) event{

    UITouch *theTouch = [touches anyObject];
    if (theTouch.tapCount == 2) {

        // self is available here to change background but I need to call it from 
        // a class method since it's being invoked elsewhere.

        [TouchTrailLayer testCall];
    }
}

+ (void) testCall {
    [TouchTrailLayer changeBackground];
}

如何在下面的类方法中引用self,就好像它是一个实例方法?或者,如何使用类方法调用实例方法(选择最好的方法)?

+ (void) changeBackground {

    // this is where self doesn't work

    [self removeChildByTag:100 cleanup:YES];
    CGSize size = [[CCDirector sharedDirector] winSize];
    CCSprite *bg = [CCSprite spriteWithFile:@"Default-hd.png"];
    bg.position = ccp( size.width /2 , size.height/2 );
    bg.tag = 100;
    [self addChild:bg z:0];
}

2 个答案:

答案 0 :(得分:2)

一般情况下,你不能在静态/类方法中获得“self”,因为根本没有类的实例,或者可能有几个。

但是,如果您知道只有一个类的实例,您可以按照“单例”的方式实现某些内容。

答案 1 :(得分:0)

Singleton非常方便,可以满足类方法尝试实现的大部分目的。但是,您可以在类方法中调用self来调用同一个类的另一个类方法。另一个小问题是,在您的实例方法中,您可以使用[self class]来调用类方法,而不是拼写出类名。它更便携,更优雅。