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

你想调用一个类方法,但是这个调用试图调用 self 的 -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: 参数用于选择器的参数。

我假设这是您最初所说的类方法,在这种情况下,这两个调用中的第一个应该可以工作。

于 2012-05-10T13:55:48.847 回答