iOS内存管理(1)-- iOS中strong,copy,retain,weak,assign的用法
2016-06-21 16:33
429 查看
一、nonatomic关键字:
首先修饰属性会要用到nonatomic(非原子的),相反的atomic(原子的),atomic是Objc使用的一种线程保护技术顾名思义就是在对该属性进行修改的时候保护起来,基本上来讲,是防止在写未完成的时候被另外一个线程读取,造成数据错误。而这种机制是耗费系统资源的,所以在iPhone这种小型设备上,如果没有使用多线程间的通讯编程,那么nonatomic是一个非常好的选择。
二、
(例如NSInteger,CGFloat)和C数据类型(int, float, double, char, 等) 适用简单数据类型
3:copy的作用:建立一个索引计数为1 的对象,然后释放旧对象(一般在NSString
首先修饰属性会要用到nonatomic(非原子的),相反的atomic(原子的),atomic是Objc使用的一种线程保护技术顾名思义就是在对该属性进行修改的时候保护起来,基本上来讲,是防止在写未完成的时候被另外一个线程读取,造成数据错误。而这种机制是耗费系统资源的,所以在iPhone这种小型设备上,如果没有使用多线程间的通讯编程,那么nonatomic是一个非常好的选择。
二、
1:weak的作用:在ARC环境下,所有指向这个对象的weak指针都将被置为nil。这个特性很有用,相信很多开发者都被指针指向已释放的对象所造成的EXC_BAD_ACCESS困扰过,使用ARC以后,不论是strong还是weak类型的指针,都不会再指向一个已经销毁的对象,从根本上解决了意外释放导致的crash。retainCount不会加1。eg:修饰代理时会用到weak。
2:assign的作用:简单赋值,不改变引用计数,对基础数据类型(例如NSInteger,CGFloat)和C数据类型(int, float, double, char, 等) 适用简单数据类型
3:copy的作用:建立一个索引计数为1 的对象,然后释放旧对象(一般在NSString
和 block中使用)
4:strong的作用:在ARC环境下,只要某一对象被一个strong指针指向,该对象就不会被销毁。如果对象没有被任何strong指针指向,那么就会被销毁。在默认情况下,所有的实例变量和局部变量都是strong类型的。可以说strong类型的指针在行为上跟非ARC下得retain是比较相似的,被指向后retainCount就会加1。
5:retain的作用:在非ARC时代,你需要自己retain一个想要保持的对象,ARC环境下就不需要了。现在唯一要做的就是用一个指针指向这个对象,只要指针没有被重置为空,对象就会一直在堆上。当指针指向新值的时候,原来的对象就会被release一次。这对实例变量,synthesize的变量或者是局部变量都是实用的。
相关文章推荐
- iOS开发系列--让你的应用“动”起来
- iOS 下ARC关于内存管理的引用计数问题
- iOS9全新的联系人相关框架——Contacts Framework
- ios automaticallyAdjustsScrollViewInsets
- iOS自iOS8.0出的指纹解锁api
- 【iOS开发】Git详解教程(三)
- iOS开发-数据持久化之plist文件
- iOS 修改状态条文字的颜色为白色的 正确方法
- 自定义 tableView的初始化方法(作为自己日志)
- iOS学习笔记12—Runloop
- iOS开发之即时通讯之Socket(AsyncSocket)
- iOS开发之第三方登录微博-- 史上最全最新第三方登录微博方式实现
- cordova(ios) - 问题解决列表(一)
- iOS 版本更新摘要(一)iOS 7.0
- 【iOS开发】适配器模式与观察者模式
- iOS _Xcode中模拟器页面切换慢动作
- iOS和OS X废弃的API(相关方法)(转自360图书馆)
- IOS 保存图片至相册
- iOS7 tableview separatorInset cell分割线左对齐
- iOS 开发 百度地图 逆地理编码