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
在接收线程上进行平衡.
归档时间: |
|
查看次数: |
5024 次 |
最近记录: |