可可 - 从NSOperation返回信息

Bri*_*ian 7 iphone cocoa multithreading cocoa-touch nsoperation

我有一个使用webservices从服务器获取数据的iPhone应用程序.我将每个调用放在一个NSOperation子类中的web服务,以便它可以被线程化.我的问题是,从完整的NSOperation子类传回信息的推荐方法是什么.我目前正在我的main方法结束时发送NSNotification,并且正在等待NSOperation完成的任何代码订阅通知.然后我将使用NSNotificationWithName:Object:的对象部分来从操作中传回信息.

我不确定是否有更好的方法来做到这一点.我听说过Key Value Coding,然后我可以使用Key Value Observing来检测操作的isFinished属性何时被更改,但我不确定最佳做法是什么.

我也试图确保我的应用程序是线程安全的,我认为只要我的通知在main方法结束时发出就不会出现问题,因此通知中的对象将不再使用在线程中它将结束.

最后,我这样称呼通知:

[[NSNotificationCenter defaultCenter] performSelectorOnMainThread:@selector(postNotification:) withObject:[NSNotification notificationWithName:@"notificationName" object:dataObject] waitUntilDone:NO];
Run Code Online (Sandbox Code Playgroud)

Tom*_*ing 16

我个人以两种方式完成了这项工作.两者都运作良好.

第一道路

您可以使用一个返回"输出"的函数,并在操作完成后调用该函数.您可以观察对象isFinished上的键NSOperation,或用于-[NSOperationQueue waitUntilAllOperationsAreFinished]确定操作何时完成.

第二种方式

您可以使用NSOperation中的委托或目标/操作.只需确保在调用委托函数或触发目标/操作时,您可以使用主线程执行此操作-[NSObject performSelectorOnMainThread:withObject:waitUntilDone:]