ios-iOS中 @synchronized(对象) 中"对象"是什么的问题

问题描述

iOS中 @synchronized(对象) 中"对象"是什么的问题

@synchronized(对象)中的这个"对象"是什么,锁定它是为了什么
在 sellTicket 中锁定了 self , 如果在 ticket 中没有用@synchronized(self),就会在sellTicket中线程运行的情况下,运行ticket中的线程,
如果用了@synchronized(self) 所有线程就会一个一个运行

//============== 代码部分 =================
@property (nonatomic, assign) NSInteger ticket;

  • (void)viewDidLoad {
    [super viewDidLoad];

    _ticket = 50;

    [NSThread detachNewThreadSelector:@selector(sellTicket) toTarget:self withObject:nil];
    [NSThread detachNewThreadSelector:@selector(sellTicket) toTarget:self withObject:nil];

    [NSThread detachNewThreadSelector:@selector(ticket123) toTarget:self withObject:nil];

    [NSThread detachNewThreadSelector:@selector(sellTicket) toTarget:self withObject:nil];
    [NSThread detachNewThreadSelector:@selector(sellTicket) toTarget:self withObject:nil];

}

  • (void)sellTicket{

    while (_ticket > 0) {

    [NSThread sleepForTimeInterval:3];
    
    @synchronized (self){   
    
        if (_ticket > 0) {
            NSLog(@"123");
            [NSThread sleepForTimeInterval:3];
            self.ticket--;
            NSLog(@"%@  %ld ", [NSThread currentThread], _ticket);
    
        }
    }
    

    }
    }

  • (void)ticket123 {

    // @synchronized (self) {
    for (int i = 0; i < 10; i++) {

        [NSThread sleepForTimeInterval:1];
        self.ticket--;
        NSLog(@"ticker %ld", _ticket);
    }
    

    }

}

解决方案

@synchronized(对象)中的这个"对象"是什么?
对象可以是OC的任何对象。

锁定它是为了什么?
防止多个线程同时访问这个对象。相当于加锁。

时间: 2024-08-03 14:03:53

ios-iOS中 @synchronized(对象) 中&amp;quot;对象&amp;quot;是什么的问题的相关文章

IOS开发:在Swift中使用JavaScript的方法和技巧

  在RedMonk发布的2015年1月编程语言排行榜中,Swift采纳率排名迅速飙升,从刚刚面世时的68位跃至22位,Objective-C仍然稳居TOP10,而JavaScript则凭借着其在iOS平台上原生体验优势成为了年度最火热的编程语言. 开发:在Swift中使用JavaScript的方法和技巧-"> 而早在2013年苹果发布的OS X Mavericks和iOS 7两大系统中便均已加入了JavaScriptCore框架,能够让开发者轻松.快捷.安全地使用JavaScript语言

iOS 的 APP 在系统中如何适应 iPhone 5s/6/6 Plus 三种屏幕的尺寸?

初代iPhone 2007年,初代iPhone发布,屏幕的宽高是 320 x 480 像素.下文也是按照宽度,高度的顺序排列.这个分辨率一直到iPhone 3GS也保持不变. 那时编写iOS的App(应用程序),只支持绝对定位.比如一个按钮(x, y, width, height) = (20, 30, 40, 50),就表示它的宽度是40像素,高度是50像素,放在(20, 30)像素的位置. iPhone 4 2010年,iPhone 4发布,率先采用Retina显示屏,在屏幕的物理尺寸不变的

iOS开发之集成iOS9中的Core Spotlight Framework搜索App的内容

Spotlight在iOS9上做了一些新的改进, 也就是开放了一些新的API, 通过Core Spotlight Framework你可以在你的app中集成Spotlight.集成Spotlight的App可以在Spotlight中搜索App的内容,并且通过内容打开相关页面.因为接到开发任务,老大说让在App中支持Spotlight, 于是又搞了搞苹果的官方文档.可以说,集成Spotlight不算复杂,官网上讲的也挺明白的,今天博客就通过一个Demo来集成一下Spotlight. 苹果官方有关C

[译]如何在 iOS 上实现类似 Airbnb 中的可展开式菜单

本文讲的是[译]如何在 iOS 上实现类似 Airbnb 中的可展开式菜单, 原文地址:How to implement expandable menu on iOS (like in Airbnb) 原文作者:Evgeny Matviyenko 译文出自:掘金翻译计划 本文永久链接:github.com/xitu/gold-m- 译者:RichardLeeH 校对者:iOSleep,KnightJoker 几个月前,我有机会实现了一个可展开式菜单,效果同知名的 iOS 应用 Airbnb.然后

举例讲解iOS应用开发中对设计模式中的策略模式的使用_IOS

策略模式是一种常见的软件设计模式,这里简单得介绍一下策略模式并用IOS简单实现一下. 所谓的策略模式,顾名思义是要采用不同的策略的.一般来说,在不同的情况下,处理某一个问题的方法也不一样.比如说对字符串的排序和对数字的排序,虽然用的都是快排,但是显然不可能使用一段通用的代码.有人说java里面的compareTo可以做到,但如果考虑这么一个问题:同样是出门旅行,老年人身体虚弱,需要大量的休息,而孩子则是精力充沛,希望玩到更多的景点.如何在同一模式下表达以上信息.采用合理的设计模式进行封装而不是大

iOS应用开发中使用设计模式中的观察者模式的实例_IOS

在软件开发中,无论是那种高级语言中总会伴随着一些最为常用的设计模式,即便就如iOS开发中与我们打交道最多的无非就是单例模式.观察者模式和工厂模式了,当然了其他的设置模式也同样存在在编程的很多地方.下面就就让我们简单的了解下观察者模式吧! 观察者模式本质上时一种发布-订阅模型,用以消除具有不同行为的对象之间的耦合,通过这一模式,不同对象可以协同工作,同时它们也可以被复用于其他地方Observer从Subject订阅通知,ConcreteObserver实现重现ObServer并将其重载其updat

实例讲解如何在iOS应用开发中使用设计模式中的代理模式_IOS

代理模式是OC中一种常见的设计模式,那么什么是代理模式呢?举个栗子,假设你是一个日发货量过万的淘宝卖家(A),但是每天的派件不可能你本人或者让你的员工去派件,因此你发布了一条信息(B),上面注明各种要求,各大快递公司看到有那么大的利益纷纷上门沟通,最后你选择了一件快递公司(C).那么在上面的例子中,我们即是委托人,发布的信息即协议(protocol),上面规定了派件人需要完成的事,而最后选择的快递公司也就是代理人(delegate),代理我们去派件. 类图: 根据以上类图,可以知道在代理模式中的

深入解析iOS应用开发中对设计模式中的桥接模式的使用_IOS

引言 在项目开发中,我们会遇到这样的一种场景:某些类型由于自身的逻辑,往往具有两个或多个维度的变化,比如说大话设计模式书中所说的手机,它有两个变化的维度:一是手机的品牌,可能有三星.苹果等:二是手机上的软件,可能有QQ.微信等.如何应对这种"多维度的变化"?怎样利用面向对象的技术来使得该类型能够轻松的沿着多个方向进行变化,而又不引入额外的复杂度?这就是本章桥接模式所要解决的问题. 何为桥接模式?     桥接模式的目的是把抽象层次结构从其实现中分离出来,使其能够独立变更.抽象层定义了供

iOS逆向工程之Hopper中的ARM指令

虽然前段时间ARM被日本软银收购了,但是科技是无国界的,所以呢ARM相关知识该学的学.现在看ARM指令集还是倍感亲切的,毕竟大学里开了ARM这门课,并且做了不少的实验,当时自我感觉ARM这门课学的还是可以的.虽然当时感觉学这门课以后似乎不怎么用的上,可曾想这不就用上了吗,不过之前学的都差不多忘了,还得捡起来呢.ARM指令集是精简指令集,从名字我们就能看出指令的个数比那些负责指令集要少一些.当然本篇所涉及的ARM指令集是冰山一角,不过也算是基础,可以阅读Hopper中的汇编了,实践出真知,看多了自