我想知道如何从类方法中访问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];
}
答案 0 :(得分:2)
一般情况下,你不能在静态/类方法中获得“self”,因为根本没有类的实例,或者可能有几个。
但是,如果您知道只有一个类的实例,您可以按照“单例”的方式实现某些内容。
答案 1 :(得分:0)
Singleton非常方便,可以满足类方法尝试实现的大部分目的。但是,您可以在类方法中调用self来调用同一个类的另一个类方法。另一个小问题是,在您的实例方法中,您可以使用[self class]来调用类方法,而不是拼写出类名。它更便携,更优雅。