Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 如何在+;中使用[self-performSelector:withObject:afterDelay:]方法;(void)类方法_Iphone_Ios_Cocos2d Iphone - Fatal编程技术网

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