ios中关键词weak,assign,copy.strong等的区别
虽然开发IOS好多年了。但是这几个关键词总是深深困扰着我。加上IOS开发从mRC到ARC的过渡,这些概念更为困扰我了。
先说weak与assign.weak只能修饰对象,不能修饰基本数据类型。而assign既可以修饰基本数据类型,也可以修饰对象。但一般用于修饰基本数据类型。因为当你用assgin修饰对象时候,如果你修饰的对象销毁,该指针的指向地址仍然存在。所以造成野指针。而这个野指针的内存在堆上,所以容易造成堆内存崩溃。而基本数据类型则存在于栈上,栈上内存系统会自动处理,不会造成野指针。
Strong表示指向并且拥有此对象。其修饰的对象引用计数会加1.这个对象只要他的引用计数不为0,该对象就不会被销毁。可以强行设置为nil销毁它。
那么stroing和copy的区别是什么呢?
strong是复制多个指针指向同一个地址。而copy在内存中拷贝一份对象的值。所以,指针是指向不同的地址。copy一般用在哪里呢?用在那些拥有可变类型的不可变对象上。比如NSString。你改变字符串,实际上他是新开辟了一份内存,吧值拷贝后,进行操作之后返回的新的内存地址。
再说说nonatomic以及atomic,
nonatomic是非原子性,就是可以多线程访问,效率高。
而atomic,是原子性的,属于安全级别的,同一个时刻只能有同一个线程访问,具有对资源的独占性,当然,效率低。
ios中关键词weak,assign,copy.strong等的区别的更多相关文章
- ios中strong, weak, assign, copy
copy 和 strong(retain) 区别 1. http://blog.csdn.net/itianyi/article/details/9018567 大部分的时候NSString的属性都是 ...
- iOS中break、continue、return三者的区别
iOS中break.continue.return三者的区别 1. break 直接跳出当前层次的循环. 如果嵌套循环如for中嵌套while,break只能跳出内层的while循环, ...
- ios 内存管理与property copy strong weak assign
- (void)fun{ NSString* str = [[NSString alloc] initWithString:@"string"]; NSLog(@"% ...
- assign,copy,strong,weak,nonatomic的理解
举个例子: NSString *houseOfMM = [[NSString alloc] initWithString:'MM的三室两厅']; 上面一段代码会执行以下两个动作: 1 在堆上分配一段 ...
- assign,copy,strong,weak,nonatomic的具体理解
例子: NSString *houseOfMM = [[NSString alloc] initWithString:'MM的三室两厅']; 上面一段代码会执行以下两个动作: 1 在堆上分配一段内存 ...
- iOS中为什么block用copy属性
1. Block的声明和线程安全Block属性的声明,首先需要用copy修饰符,因为只有copy后的Block才会在堆中,栈中的Block的生命周期是和栈绑定的,可以参考之前的文章(iOS: 非ARC ...
- iOS开发——高级篇——iOS中为什么block用copy属性
1. Block的声明和线程安全Block属性的声明,首先需要用copy修饰符,因为只有copy后的Block才会在堆中,栈中的Block的生命周期是和栈绑定的,可以参考之前的文章(iOS: 非ARC ...
- iOS中的静态库与动态库,区别、制作和使用
如果我们有些功能要给别人用,但是又不想公开代码实现,比如高德地图.第三方登录分享等等,这时候我们就要打包成库了.库分静态库和动态库两种: 静态库:以.a 和 .framework为文件后缀名.动态库: ...
- iOS 中的静态库与动态库,区别、制作和使用
如果我们有些功能要给别人用,但是又不想公开代码实现,比如高德地图.第三方登录分享等等,这时候我们就要打包成库了.库分静态库和动态库两种: 静态库:以.a 和 .framework为文件后缀名.动态库: ...
随机推荐
- for循环的beak continue用法
continue跳出该循环, for循环后面的都要执行.break直接中段循环 后面不执行了
- 初识python爬虫框架Scrapy
Scrapy,按照其官网(https://scrapy.org/)上的解释:一个开源和协作式的框架,用快速.简单.可扩展的方式从网站提取所需的数据. 我们一开始上手爬虫的时候,接触的是urllib.r ...
- cocos creator 无法打开项目 dock栏只显示图标问题解决方法
1.打开项目 2.找到 library和local文件夹 3.清空这两个文件夹的数据 4.问题已解决 原因: 以前生成的旧数据会和新数据发生冲突,把生成的旧数据清理掉就OK了.
- Tomcat配置Web默认页面
1.在web.xml中配置要加载的首页 <welcome-file-list> <welcome-file>Tiring-room/index.jsp</welcome- ...
- 北京大学Cousera学习笔记--5-计算导论与C语言基础--计算机的基本原理-设计程序
只要你认真的思考,你就会发现这个世界是如此的简单,正如我们想象的一样,正因为如此,我们的思考才更加的有价值 1.单词:关键字(有特定含义的):其他词用关键字定义出来 2.数和计算符号:数据类型+运算符 ...
- 学习DButils笔记
DBUtills: *********************** 1:创建对象:QueryRunner的对象,其中创建的方式有两种: ①QueryRunner qr = new QueryRunne ...
- 基于Nginx 和 uwsgi 搭建 django.
第一篇博客,不是很懂语法之类的,希望通过多写点东西,记录自己的成长,早点成为一个pyer. 就写下这两天折腾的这个nginx-uwsgi-django. 首先附上官方文档链接 http://uwsgi ...
- day16 python之匿名函数,递归函数
匿名函数 匿名函数格式 函数名 = lambda 参数 :返回值 #参数可以有多个,用逗号隔开 #匿名函数不管逻辑多复杂,只能写一行,且逻辑执行结束后的内容就是返回值 #返回值和正常的函数一样可以是任 ...
- 记录心得-IntelliJ iDea 创建一个maven管理的的javaweb项目
熟能生巧,还是记录一下吧~ 开始! 第一步:File--New--Project--Maven--Create from archetype--maven-archetype-webapp 第二步:解 ...
- 关于babel官网的学习
提起babel,前端er大概都不陌生.但是为什么要有babel呢?解决了什么问题?怎么使用babel呢?注意点在哪?以下就从这几个方面总结一下我关于babel学习的结果吧. 为什么要有babel呢? ...