Iphone 从NSThread调用方法
我试图在我的应用程序中调用一个类方法:didFinishLaunchingWithOptions:使用NSThread。但奇怪的是,这个方法没有被调用。我在didFinishLaunchingWithOptions方法中尝试了以下方法Iphone 从NSThread调用方法,iphone,ios,ios5,methods,nsthread,Iphone,Ios,Ios5,Methods,Nsthread,我试图在我的应用程序中调用一个类方法:didFinishLaunchingWithOptions:使用NSThread。但奇怪的是,这个方法没有被调用。我在didFinishLaunchingWithOptions方法中尝试了以下方法 [self performSelector:@selector(parseAdContent) onThread:myThread withObject:AdvertisementView waitUntilDone:NO]; [myThread st
[self performSelector:@selector(parseAdContent) onThread:myThread withObject:AdvertisementView waitUntilDone:NO];
[myThread start];
请帮助我。这是创建单独线程的方式:
[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];
}
以下是创建单独线程的方式:
[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];
}
您希望调用类方法,但此调用正在尝试调用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:参数用于选择器的参数
我假设这是一个类方法,如您最初所述,在这种情况下,这两个调用中的第一个应该可以工作。您希望调用一个类方法,但此调用试图调用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:参数用于选择器的参数
我假设这是一个类方法,如您最初所述,在这种情况下,这两个调用中的第一个应该可以工作。OP说他正在尝试调用一个类方法。目标不应该是[自我类]?@tronbabbylove谢谢你的回复,但我没有得到预期的结果。Target不能是self或self类,这是因为我在另一个名为Adview的类中有一个方法,其中advisementview是applicationDelgate类中该类的实例变量。还要帮忙吗please@user1188275它位于Adview类中——那么它是类方法还是实例方法呢?对于我上面使用的方法示例(-(void)parseAdContent:(id)obj),目标是self,而不是[self class]。如果要使用静态方法(ex:+(id)someMethod:(id)param),那么目标实际上是[self class]。我的例子应该有足够的描述性]OP说他试图调用一个类方法。目标不应该是[自我类]?@tronbabbylove谢谢你的回复,但我没有得到预期的结果。Target不能是self或self类,这是因为我在另一个名为Adview的类中有一个方法,其中advisementview是applicationDelgate类中该类的实例变量。还要帮忙吗please@user1188275它位于Adview类中——那么它是类方法还是实例方法呢?对于我上面使用的方法示例(-(void)parseAdContent:(id)obj),目标是self,而不是[self class]。如果要使用静态方法(ex:+(id)someMethod:(id)param),那么目标实际上是[self class]。我的示例应该具有足够的描述性]我尝试了您的两个示例,使我的方法成为类和实例方法,但执行周期不会通过该方法。我完全迷路了。在过去的两天里,这个问题已经解决了!!。谢谢您的回复。@user1188275我注意到的另一件事是您正在向方法(AdvertisementView)传递一个参数,但是您没有在选择器标记中包含“:”。它应该是“selector:(parseAdContent:)”我认为添加冒号会使它成为一个完全不同的选择器-尝试添加冒号,看看它是否会改变任何内容。@user1188275另一个注意事项-根据Apple文档,“选择器必须只接受一个参数,并且不能有返回值。”因此,请确保parseAdContent没有返回任何内容。我尝试了您的两个示例,将我的方法设置为class和instance方法,但执行周期不会通过该方法。我完全迷路了。在过去的两天里,这个问题已经解决了!!。谢谢您的回复。@user1188275我注意到的另一件事是您正在向方法(AdvertisementView)传递一个参数,但是您没有在选择器标记中包含“:”。它应该是“selector:(parseAdContent:)”我认为添加冒号会使它成为一个完全不同的选择器-尝试添加冒号,看看它是否会改变任何内容。@user1188275另一个注意事项-根据Apple文档,“选择器必须只接受一个参数,并且不能有返回值。”因此,请确保parseAdContent没有返回任何内容。确保此方法在同一个类中。是否要在主线程中调用它?AdvertisementView是类还是类的实例?我不想在主线程中调用它。要在后台执行此过程。@类@tronbabbyloveyes的Saad实例在同一个类中。任何其他帮助都将不胜感激。确保此方法在同一个类中。是否要在主线程中调用它?AdvertisementView是类还是类的实例?我不想在主线程中调用它。广域网