Objective-C 2.0中的多线程问题

Mic*_*all 2 iphone cocoa multithreading objective-c nslock

我有我的主应用程序委托,其中包含一个返回对象的方法.此应用程序委托在主线程上运行.

我也有一个在不同的线程上运行的NSOperation.除了希望能够在我的主线程上调用我的app委托方法之外,我还需要从我的NSOperation线程调用它来获取它返回的对象.我的第一个问题是,如果我从我的其他线程中调用这个...

id newObject = [[[UIApplication sharedApplication] delegate] myMethod];
Run Code Online (Sandbox Code Playgroud)

...将在与NSOperation相同的线程上处理该方法,还是与应用程序委托所在的线程(主)相同?

我还想确保myMethod我的操作线程或主线程一次只调用一次内部代码.我可以在应用程序委托中创建一个NSLock实例var,并执行以下操作:

-(id)myMethod {
    [myLock lock];
    myObject = // Get or create my object to return
    [myLock unlock];
    return myObject;
}
Run Code Online (Sandbox Code Playgroud)

谢谢你的帮助!

麦克风

bbu*_*bum 11

除非您明确地编写代码以使某些内容在另一个线程上执行,否则每个方法调用都将直接在调用它的线程上执行.方法调用没有魔力.为了线程的目的,您可以将其视为具有与C函数调用完全相同的语义/ ABI.

您的锁定模式将正常工作,以确保跨线程的独占访问.

另外两个不相关的笔记(因为很多人绊倒了它):

  • 声明属性atomic与线程安全无关.原子性仅保证您获得有效值,而不是正确的值(存在差异).

  • 自动释放的对象永远不会在线程之间传递.您需要retain在发送线程上显式,并release在接收线程上进行平衡.