单例在多线程中的使用

一次执行  dispatch_once: 对应的代码只执行一次 , 并且它是线程安全的, 系统会自动这个函数加锁,保存同一时间只有一个线程去执行任务, 实现真正意义的一次性执行

 

什么时候需要用到一次性执行:  单例

单例:

就是在程序运行期间,只有一个实例化对象  ----

    举例:音乐播放器的App, 同时只能播放一首歌曲.

    好处: 如果不使用同一个播放管理器对象, 那就播放下一首歌曲时, 先销毁上一个对象, 再创建一个新对象

            这样做就比较消耗资源.

         既然同一个时刻只能播放一首歌曲 ,所以我们只要一个播放管理者实例就可以了, 当播放下一首歌曲的时候,直接用这个对象把上一首歌移除, 播放这一首就可以了.

 

static id _instance;
//单例的实现
+ (instancetype)sharedMusicManager{if (_instance){return _instance;}_instance = [[self alloc] init];return _instance;}//[alloc] init 方法会调用 allocWithZone
+ (instancetype)allocWithZone:(struct _NSZone *)zone{static dispatch_once_t onceToken;//系统提供的, 官方建议实现单例就用这种方式//dispatch_once 这个方法是线程安全dispatch_once(&onceToken, ^{_instance = [super allocWithZone:zone];});return _instance;
}

 

转载于:https://www.cnblogs.com/thinkToShare/p/5642109.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/490379.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

找到一个或多个多重定义的符号_初中数学之相反数,总结规律,学会多重符号的化简...

今天继续和大家一起来学习初中数学,初一的相关知识,在前面已经介绍了正数和负数,对于有理数也有了清楚的认识,今天我们来学习相反数,相反数的概念和表示是中考命题的热点之一,经常结合其他知识点一起考察&a…

分类分布(categorical分布)

解释: 假设X有3种状态,分别为x_1,x_2,x_3,这三种状态的概率分别为0.1,0.7,0.2(分别对应θ_1,θ_2,θ_3) 例如现在要求x_2这种状态的概率,则x_10,x_21,x_30 代入公式: θ_1^x_1θ_1^01; θ_…

SQL Server XML转Table

前言   在SQL Server中有时候我们需要传人一个Table过去,然后可以在存储过程中批量更新,批量的获取相应数据。 但存储过程的参数是固定,所以这里我们可以变通的传人xml类型的参数,然后在存储过程中直接将其转换成我们需要的Tabl…

python处理报错_python3报错及解决方案/须注意的细节(持续更新)

问题:编码的问题导致。在pymysql.connect()创建连接时,参数charset"utf8",而非"utf-8".2、latin-1 codec cant encodecharacters编码的问题导致。数据库的编码和数据源的编码不一致,并且包含了不能处理的字符。出现这种报…

【人工智能】人工智能时代的道路选择 | 焦点评论

‍‍‍来源:产业智能官对话嘉宾朱松纯(Song-Chun Zhu)教授马尔奖、赫尔姆霍茨奖获得者、UCLA教授、IEEE Fellow、暗物智能科技创始人沈向洋(Harry Shum)博士微软全球执行副总裁、美国国家工程院外籍院士、英国皇家工程…

error: reference to non-static member function must be called sort(nums.begin(),nums.end(),cmp1)

leetcode179题中编译出现则个问题 出错的代码: class Solution { public:bool cmp1(const int& a, const int& b){string s1to_string(a);string s2to_string(b);string ans1s1.append(s2);string ans2s2.append(s1);return ans1>ans2;}string largest…

Java中间件

传统的HTML已经满足不了如今web系统的诸多的功能需求,建立一个交互式的Web,便诞生了各种Web开发语言,如ASP,JSP,PHP等,这些语言与传统的语言有着密切的联系,如JSP基于Java语言。 JSP是在普通的…

怎么把php查询到的值显示到下拉框中_RazorSQL for Mac(数据库工具查询) v8.5.0

RazorSQL Mac是一款专门为mac用户推出的数据库管理软件,允许您从一个数据库工具查询,更新,导航和管理所有主要数据库,RazorSQL Mac功能强大还支持SQL的编辑、数据库管理工具,支持多种数据库!razorsql mac版使用方法Raz…

5分钟,看尽芯片和摩尔定律“你追我赶”的抗衡50年

来源:大数据文摘“摩尔定律过去是每5年增长10倍,每10年增长100倍。而如今,摩尔定律每年只能增长几个百分点,每10年可能只有2倍。因此,摩尔定律结束了。”今年一月份,英伟达(Nvidia)CEO黄仁勋在CES 2019展会…

Android Context 上下文 你必须知道的一切

今天被问到了关于Context的一些问题。发现自己关于这部分还是不是很清晰,然后发现洋神博客里有一篇讲的很好 很详细。我反正是看懂了,我觉得我再写 也不会比这个更清楚了,所以转过来。 http://blog.csdn.net/lmj623565791/article/details/40…

python中mysqldb模块_python中MySQLdb模块用法实例

本文实例讲述了python中MySQLdb模块用法。分享给大家供大家参考。具体用法分析如下:MySQLdb其实有点像php或asp中连接数据库的一个模式了,只是MySQLdb是针对mysql连接了接口,我们可以在python中连接MySQLdb来实现数据的各种操作。python连接m…

g++编译多个文件

假设现在有一个add.cpp,add.h,main.cpp这三个文件,文件内容如下: add.cpp: add.h: main.cpp: 我需要将add.cpp和main.cpp这两个文件进行编译,有以下两种方法: g -c add.cpp g -c main.cpp g main.o add.o -o test ./test 第二种…

【数字孪生】工业互联网和数字孪生

来源:产业智能官《崛起的超级智能》一书主要阐述当今天人类为人工智能的春天到来而兴奋,为人工智能是否超越人类而恐慌的时候,一个更为庞大、远超人类预期的智能形态正在崛起,种种迹象表明50年来,互联网正在从网状结构…

javascript数组扁平化处理

最近看jQuery源码$.map方法的实现,返回值利用了一个扁平化处理 return ret.concat.apply( [], ret ) 这有个疑问,不知道为什么不直接返回ret 根据这个返回值处理,推测ret可能不是一阶数组,例如[1,2,[3,4]]这样的; var ret [1,2,[…

k折交叉验证法python实现_Jason Brownlee专栏| 如何解决不平衡分类的k折交叉验证-不平衡分类系列教程(十)...

作者:Jason Brownlee编译:Florence Wong – AICUG本文系AICUG翻译原创,如需转载请联系(微信号:834436689)以获得授权在对不可见示例进行预测时,模型评估涉及使用可用的数据集来拟合模型,并评估其表现性能。…

linux的find命令满屏权限不够提示

用find命令是如果是普通用户通常会输出一堆“权限不够”的提示,这会影响到我们找出有用的信息,为了将这些错误忽略,可以采用重定向: find / -name add.h 2> /dev/null

AI“换脸”打开潘多拉魔盒,如何应对?

来源:科学网近日,一款名为“ZAO”的换脸APP引发舆论关注。用户上传照片,就可以把影视剧主角的脸替换成用户自己的脸。在过把“明星瘾”的同时,也让大众关注到“换脸”带来的个人信息泄露风险。信息时代,“脸面”不仅仅…

stm32超声波测距代码_超声波模块另类用法,悬浮,你也能做到

今天,给大家介绍一个「超酷的DIY声波悬浮」研究项目。虽然超声波悬浮,不能像磁悬浮那样悬浮比较重的物品。不过能把小泡沫球、水滴或者蚂蚁这样的小物体悬浮起来也是很有意思的。制作这样一个简易的超声波悬浮器并不需要多少成本,而且材料很容…

vim:去掉响铃

vim在移动字符出界&#xff08;上下左右&#xff09;包括按<ESC>建都会响铃&#xff0c;有时候真的很烦。 在网上搜了一下&#xff0c;原来是visualbell来控制的&#xff0c;在vim里使用命令:help visualbell&#xff0c;原来禁止命令是:novb 好了&#xff0c;在.vimrc文…