@synchronized 的作用是创建一个互斥锁,保证此时没有其它线程对 self 对象进行修改。这个是 objective-c 的一个锁定令牌,防止 self 对象在同一时间内被其它线程访问,起到线程的保护作用。 一般在公用变量的时候使用,如单例模式或者操作类的 static 变量中使用。
[email protected]()[email protected],[email protected]��线程对一段代码进行保护,避免别的线程执行该段代码。针对程序中的不同的关键代码段,我们应该分别使用不同的信号量。只有在应用程序编程执行多线程之前就创建好所有需要的互斥信号量对象来避免线程间的竞争才是最安全的。
例 1:使用 self 作为互斥信号量来实现当前对象对实例方法访问的同步
- - (void) start {@synchronized(self) {
- //关键代码;
- }
- }
例 2:使用自定义的信号量来对方法加锁
- - (void) start {
- OraCardManager * cardManager = [[OraCardManager alloc] init];@synchronized(cardManager) {
- //关键代码;
- }
- }
来源: http://www.bubuko.com/infodetail-2218372.html