从NSThread调用方法

时间:2012-05-10 13:41:07

标签: iphone ios ios5 methods nsthread

我试图在我的应用程序中调用一个类方法:didFinishLaunchingWithOptions:使用NSThread。但奇怪的是这种方法没有被调用。我在didFinishLaunchingWithOptions方法中尝试过以下内容。

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

帮助我。

2 个答案:

答案 0 :(得分: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];
}

答案 1 :(得分: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:参数用于selector的参数。

我假设这是你原来说的一个类方法,在这种情况下,这两个调用中的第一个应该有效。