performSelectorOnMainThread over Notifications

时间:2012-07-10 11:19:05

标签: iphone objective-c ios cocoa-touch nsnotificationcenter

我有一些基本的怀疑,猜猜有人会帮助我。

请参阅此问题:Update ULabel immediately while downloading files

我尝试使用performSelectorOnMainThread,它在另一个类中调用updateProgress方法,但标签没有更新。

但现在我已经使用了像

这样的通知
[[NSNotificationCenter defaultCenter] postNotificationName:@"updateProgress" object:nil userInfo:nil];

似乎在调用方法并更新UILabel。虽然我的问题得到了解决,但我想知道为什么上述performSelectorOnMainThread对我来说没有成功?任何具体原因?

2 个答案:

答案 0 :(得分:1)

您进行performSelectorOnMainThread调用的类和updateProgress方法需要位于同一个类中。如果没有,(在您的情况下),在调用performSelectorOnMainThread的类中创建一个方法,并将其重定向到另一个类的updateProgress

答案 1 :(得分:0)

performSelectorOnMainThread可用于在主线程中运行某些代码。它似乎不是一种在另一个类上调用方法的方法(即使你可以使用它来调用另一个类上的方法,如果你有类的工作实例)。如果您在其中一个类中使用API​​调用,则可能必须使用单独的线程来执行API调用,因为它会阻止主线程(对于使用您的应用的用户来说,这不是很友好)。所以在ios中你必须只从主线程调用UIKit。

NSNotification用于获取事件调用。我的意思是它会在发生观察者注册的特定事件时通知观察者。

希望这会对你有所帮助。