2

アプリケーションでクラス メソッドを呼び出そうとしています: didFinishLaunchingWithOptions: using NSThread. しかし、奇妙なことに、このメソッドは呼び出されていません。didFinishLaunchingWithOptions メソッドで以下を試しました。

[self performSelector:@selector(parseAdContent) onThread:myThread withObject:AdvertisementView waitUntilDone:NO];
      [myThread start];

これで私を助けてください。

4

2 に答える 2

0

これは、別のスレッドを作成する方法です。

[NSThread detachNewThreadSelector:@selector(yourSelector:) toTarget:yourTarget withObject:objectYouWishToPassAsParameter];

指定したセレクターは、新しいスレッドで自動的に実行されます。

コードの特定の例:

[NSThread detachNewThreadSelector:@selector(parseAdContent:) toTarget:self withObject:AdvertisementView];

スレッド セレクターは次のようになります。

- (void)parseAdContent:(id)obj {
    NSAutoreleasePool *threadPool = [[NSAutoreleasePool alloc] init];
    // Your background thread code here

    [pool drain];
}
于 2012-05-10T13:55:36.553 に答える
0

クラス メソッドを呼び出したいのですが、この呼び出しは自分自身の -parseAdContent: を呼び出そうとしています。これがどのクラスで呼び出されているかはわかりませんが、いずれにせよ、ここでのターゲットはインスタンス変数 self であり、クラスではありません。このようなものは、おそらくあなたが探しているものです。

[myThread initWithTarget:[self class] selector:@selector(parseAdContent) object:AdvertisementView];

編集: したがって、メソッドが Adview クラスのクラス メソッドである場合は、ターゲットを Adview クラスに変更するだけです...

[myThread initWithTarget:[Adview class] selector:@selector(parseAdContent) object:AdvertisementView];

でもAdviewクラスのインスタンスメソッドなら、対象はAdview型の変数AdvertisementViewのインスタンスになりますよね?

[myThread initWithTarget:AdvertisementView selector:@selector(parseAdContent) object:AdvertisementView];

しかし、これは意味がありません。インスタンスメソッドを呼び出して、インスタンスをパラメーターとして独自のメソッドに渡すことはありません...ターゲットは、セレクターを呼び出しているオブジェクトです。object: パラメータは、セレクタの引数として使用されます。

これは、最初に述べたようにクラスメソッドであると想定しています。その場合、これら2つの呼び出しの最初の呼び出しが機能するはずです。

于 2012-05-10T13:55:48.847 に答える