我试图在我的应用程序中调用一个类方法:didFinishLaunchingWithOptions:使用NSThread。但奇怪的是这种方法没有被调用。我在didFinishLaunchingWithOptions方法中尝试过以下内容。
[self performSelector:@selector(parseAdContent) onThread:myThread withObject:AdvertisementView waitUntilDone:NO];
[myThread start];
帮助我。
答案 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的参数。
我假设这是你原来说的一个类方法,在这种情况下,这两个调用中的第一个应该有效。