Mic*_*all 29 iphone multithreading ios
我有一个代码块,可以经常访问主线程或其他几个后台线程.我需要确保一次只处理一个代码.
我目前正在使用一个@synchronized(self) { }块,但我不确定这是否提供了正确的保护.它与NSLock实例有何不同?
最后,任何人都可以建议我如何保护我的方法?该方法在我的应用程序委托中,我通过调用以下方法从各种线程访问它:
[[[UIApplication sharedApplication] delegate] myMethod];
Run Code Online (Sandbox Code Playgroud)
非常感谢,
麦克风
Tho*_*ing 31
Google Mac博客上有一篇很棒的博客文章,内容涉及以下内容@synchronized:http:
//googlemac.blogspot.com/2006/10/synchronized-swimming.html
我目前正在使用@synchronized(self){}块,但我不确定它是否提供了正确的保护.它与NSLock实例有何不同?
有几种方法可以同步关键部分(@synchronized,NSLock,OSSpinLock,...).
我认为这@synchronized是最方便(也是最慢)的方法.
这是一个很好的SO答案,解释了@synchronized和NSLock之间的区别.
您正在通过共享实例(基本上是单例)委托访问您的方法.也许你可以重新思考你的设计并找出一种方法,允许你锁定一小段代码myMethod.
Bra*_*son 16
如果你确实想要一次处理一个项目,我的建议是使用NSOperations和NSOperationQueue,你将maxConcurrentOperationCount设置为1.如果你确定这个共享块的唯一方式通过此队列中的操作访问代码,您将不再需要昂贵的锁.
这可能需要对您的应用程序进行一些重组,但我发现在我自己的应用程序中应用它会带来更好的性能和更清晰的代码.
| 归档时间: |
|
| 查看次数: |
18276 次 |
| 最近记录: |