ios - @synchronized() 和 NSLock 的区别

标签 ios iphone multithreading

我有一段代码经常被主线程或其他几个后台线程访问。我需要确保一次只处理一个代码。

我目前正在使用 @synchronized(self) { } block ,但我不确定它是否提供了正确的保护。它与 NSLock 实例有何不同?

最后,有人可以建议我如何保护我的方法吗?该方法在我的应用程序委托(delegate)中,我通过调用从各种线程访问它:

[[[UIApplication sharedApplication] delegate] myMethod];

非常感谢,

迈克

最佳答案

Google Mac 博客上有一篇关于 @synchronized 内部工作原理的精彩博文:
http://googlemac.blogspot.com/2006/10/synchronized-swimming.html

I'm currently using a @synchronized(self) { } block but I'm not sure if that's providing the correct protection. How does it differ from an NSLock instance?

有几种方法可以同步关键部分 ( @synchronized, NSLock, OSSpinLock, ... )。
我认为 @synchronized 是最方便的 ( and also the slowest ) 方法。
Here is a good SO answer这解释了@synchronized 和 NSLock 之间的区别。

您正在通过共享实例(基本上是单例)委托(delegate)访问您的方法。也许您可以重新考虑您的设计并想出一种方法,让您可以在 myMethod 中锁定一小段代码。

关于ios - @synchronized() 和 NSLock 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1776042/

相关文章:

ios - 关于 ARC , AutoRelease 的困惑

ios - 由于版本错误,无法在设备上启动用Swift编写的iOS应用

iphone - 通过代码设置 UILabel - 字体 - 生成错误 - iPhone

ios - 像 Strava 这样的应用程序如何在 iPhone 上继续在后台运行?

java - Java 中的线程

java - 多线程程序中的数据不一致

asp.net - ASP.NET 工作线程可以一次处理多个请求吗?

ios - FBAccount Kit 国家代码本地化

ios - webView中解析Json数据

ios - Xcode 8/swift 3 : Reset all variables to initial values