0

[self performSelector: withObject: afterDelay:]でメソッドを使用するにはどうすればよい+(void)classMethodですか?

次のように定義されたスプライトがあります。

+(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];
}
4

2 に答える 2

1

技術的selfには、指定されたクラスを指しObjectます。あなたの場合、を作成していないため、静的メソッドからメソッドObjectを呼び出すことはできません。Object

ビジュアル

ここに画像の説明を入力

簡単なテストでは、メソッドがインスタンス レベルで宣言されている場合、クラス メソッドからアクセスできないことがわかります。

あなたの場合、

+(void)classMethod
{

}

クラスメソッドですが、

[self performSelector:@selector(clean:) withObject:sprite afterDelay:3.0];

は のインスタンス メソッドですNSObject。そのため、クラス メソッドから呼び出すことができません。

アップルドキュメント

- (void)performSelector:(SEL)aSelector withObject:(id)anArgument afterDelay:(NSTimeInterval)delay

これは、許可されていないクラス メソッドからインスタンス メソッドにアクセスしていることを意味します。

于 2012-08-20T02:14:24.803 に答える
0

Instanceこの方法を別の方法で使用できるとは思いませんClass

遅延アクションを実行したい場合は、NSTimer timerWithTimeInterval:target:selector:userInfo:repeats:代わりに試してください。

于 2012-08-20T02:16:42.263 に答える