我刚刚创建了一个单例方法,我想知道函数@synchronized()的作用,因为我经常使用它,但不知道它的含义.

推荐答案

它在代码挡路周围声明一个critical section.在多线程代码中,@synchronized保证在任何给定时间只有一个线程可以执行挡路中的代码.

如果您不知道它的作用,那么您的应用程序可能不是多线程的,您可能不需要使用它(特别是如果单例本身不是线程安全的).


Edit:添加了2011年原始答案中没有的更多信息.

@synchronized号指令prevents multiple threads from entering any region of code that is protected by a @synchronized directive referring to the same object号.传递给@synchronized指令的对象是用作"锁"的对象.如果将不同的对象用作锁,则两个线程可以位于同一受保护的代码区域中,您还可以使用与锁相同的对象来保护两个完全不同的代码区域.

此外,如果恰好将nil作为锁对象传递,则根本不会获取任何锁.

Ios相关问答推荐

如何在SwiftUI中扩展双击的可检测区域?

为什么EKEventStore().questFullAccessToEvents()可以与模拟器一起使用,而不能与真实设备一起使用?

安装新版本 XCode 15.0 后无法运行应用程序 XCode

Swift locationManager.requestWhenInUseAuthorization() 不提示用户

圆角矩形路径上的蛇形动画

使用按位|带有布尔操作数

在 SwiftUI 中打开 PDF

UILabel - 字符串作为文本和链接

关闭所有打开的视图控制器的单个函数

构建失败:ld:重复符号 _OBJC_CLASS_$_Algebra5FirstViewController

不变违规:应用程序 AwesomeProject 尚未注册使用静态 jsbundle 为 iOS 设备构建时

如何启用滑动以删除 TableView 中的单元格?

在 Swift 中上传带参数的图像

如何在键盘上方添加工具栏?

SLComposeViewController 分享教程

iOS:如何从 URL 调试新启动应用程序

有没有办法在应用store 之外分发 ios 应用程序?

更新字段时,UITextField值已更改未触发

UIGestureRecognizer 阻止子视图处理touch 事件

将 struct 保存到 UserDefaults