Iphone 如何在+;中使用[self-performSelector:withObject:afterDelay:]方法;(void)类方法
如何在Iphone 如何在+;中使用[self-performSelector:withObject:afterDelay:]方法;(void)类方法,iphone,ios,cocos2d-iphone,Iphone,Ios,Cocos2d Iphone,如何在+(void)classMethod中使用[自执行选择器:withObject:afterDelay:][/code>方法 我在下面定义了一个精灵: +(void)classMethod { CCSprite * sprite = [CCSprite spriteWithFile:@"sprite.png"]; //and hope afterDelay3.0second remove this sprite [self performSelector:@select(
+(void)classMethod
中使用[自执行选择器:withObject:afterDelay:][/code>方法
我在下面定义了一个精灵:
+(void)classMethod
{
CCSprite * sprite = [CCSprite spriteWithFile:@"sprite.png"];
//and hope afterDelay3.0second remove this sprite
[self performSelector:@select(clean:) withObject:sprite afterDelay:3.0];
}
+(void)clean:(CCSprite *)sprite
{
[sprite removeFromSuperView];
}
从技术上讲,self
是指给定类的对象
,在您的情况下,您没有创建对象
,因此无法从静态方法调用对象
方法
视觉
快速测试表明,如果您的方法声明为实例级,那么您将无法从类方法访问它
就你而言
+(void)classMethod
{
}
是类方法,但是
[self performSelector:@selector(clean:) withObject:sprite afterDelay:3.0];
是NSObject
的实例方法,这就是您无法从类方法调用的原因
,
这意味着您正在从类方法访问实例方法,这是不允许的。我认为您不能在另一个类
方法中使用此实例
方法
如果您想执行一些延迟操作,请尝试使用NSTimer timer with timeinterval:target:selector:userInfo:repeats:
。看起来您确实使用了它。问题是什么?例如,这段代码崩溃了,你在类方法中使用了“self”。@HotLicks:那么?这是完全正确的。@ryuikuya:发生了什么事故?显示堆栈跟踪。如前所述,没有明显的错误。不管他是否在创建对象,而是不管他是否在实例方法中。他不是,所以如果它是有效的,那么他是指向类对象,而不是类的实例。这是不正确的。在类方法上,self
引用类(不是实例)。这两个方法都是类方法。@JonathanGrynspan,我尊重你的建议,但是为什么快速测试显示我是正确的呢?因为你有打字错误。在OP的代码中,两个方法都是类方法(由+
表示),但在您的代码中,一个是实例方法(-
)。+1,@Selkie,您是绝对正确的,您给出的建议是实现这一点的完美方法。别担心!
- (void)performSelector:(SEL)aSelector withObject:(id)anArgument afterDelay:(NSTimeInterval)delay