我有一个NSAutoreleasePool线程,旨在从Web服务中提取信息,我的Web服务代码运行良好,我可以触发线程在视图控制器中启动而没有任何麻烦,事实上它的工作非常好
我想:
我可以使用performSelectorOnMainThread在appdelegate上启动一个方法,但是如何让我的子视图控制器“订阅”appdelegate上的方法?
答案 0 :(得分:3)
使用NSNotificationCenter,您可以发布,通知:D 这样,没有appDelegate现在其他类可以“订阅”他们需要的通知。
另外,我会保持线程活着,每次生成一个新线程都很昂贵,只有经常产生它才会生成。我建议使用GCD(iOS 4+)
答案 1 :(得分:3)
这是你做的:
从发送邮件的班级发布通知,如:
[[NSNotificationCenter defaultCenter] postNotificationName: @"YOUR_NOTIFICATION_NAME" object: anyobjectyouwanttosendalong(can be nil)];
在您希望在发布时通知通知的视图控制器中:
在viewDidLoad中执行:
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(METHOD_YOU_WANT_TO_INVOKE_ON_NOTIFICATION_RECEIVED) name:@"YOUR_NOTIFICATION_NAME" object:sameasbefore/nil];
重要!不要忘记你的viewDidUnload():
[[NSNotificationCenter defaultCenter] removeObserver:self name:@"YOUR_NOTIFICATION_NAME" object:sameasbefore/nil];
我不太确定与通知相关联的对象,但您可以查看here
注意:当只有一个对象通知另一个对象时,最好使用协议:)但在这种情况下,由于有多个视图控制器正在侦听,请使用通知
答案 2 :(得分:1)
使用NSNotificationCenter发送视图控制器正在观察的事件?