认识retain copy assign strong weak 的区别
来源:互联网 发布:手机时钟显示软件 编辑:程序博客网 时间:2024/05/27 20:23
retain: 引用计数+1 目的:不让这个对象释放掉——》MRC-》ARC strong weak
copy : 拷贝 为了原数据更改 影响使用之后的数据 -> 使用copy(拷贝的内容 必须遵守拷贝协议)数组 字典 字符串
assign:直接赋值 用于基本数据类型 -> 也包含演化出来的类型 int NSInteger BOOL float。。。
strong:强引用->不会被轻易释放掉->当对象使用完毕之后 对象释放掉强引用的对象才会被释放掉-》ARC UI控件 自己创建类声明的对象
weak:弱引用->当出现内存警告的时候 告诉编译器 可以释放掉这个对象 UI控件 声明的对象
数字的 使用assgin
数组 字典 字符串 使用copy
其他 使用strong weak
另外,我在网上还查到一些其他;
凡是nsstring,就用copy,定义一个模型对象,就用strong,只是赋值的,例如int、double、char 以及CGRect类似的就用assign。
当用copy时,set方法会先release旧值,再copy一个新的对象,reference count 为1(减少了对上下文的依赖);当用assign,直接赋值,无retain操作。当用retain,release旧值,retain新值;
而strong与weak的区别
strong类似于retain,会将对象的引用计数器+1,分配内存地址。
weak类似于指针,只是单纯的指向某个地址,但是本身并未分配内存地址。当指向的地址被销毁时,该指针会自动nil。
例子:
1. @synthesize string1;
2. @synthesize string2;
再来猜一下,下面输出是什么?
1. self.string1 = [[NSString alloc] initWithUTF8String:"string 1"];
2. self.string2 = self.string1;
3. self.string1 = nil;
4. NSLog(@"String 2 = %@", self.string2);
结果是:String 2 = null
分析一下,由于self.string1与self.string2指向同一地址,且string2没有retain内存地址,而 self.string1=nil释放了内存,所以string1为nil。声明为weak的指针,指针指向的地址一旦被释放,这些指针都将被赋值为 nil。这样的好处能有效的防止野指针。在c/c++开发过程中,指针的空间释放了后,都要将指针赋为NULL. 在这儿用weak关键字做了这一步。
总之,这些需要区分开,对于属性构造方法有很大帮助,可以省去许多麻烦。
而strong与weak的区别
strong类似于retain,会将对象的引用计数器+1,分配内存地址。
weak类似于指针,只是单纯的指向某个地址,但是本身并未分配内存地址。当指向的地址被销毁时,该指针会自动nil。
例子:
1. @synthesize string1;
2. @synthesize string2;
再来猜一下,下面输出是什么?
1. self.string1 = [[NSString alloc] initWithUTF8String:"string 1"];
2. self.string2 = self.string1;
3. self.string1 = nil;
4. NSLog(@"String 2 = %@", self.string2);
结果是:String 2 = null
分析一下,由于self.string1与self.string2指向同一地址,且string2没有retain内存地址,而 self.string1=nil释放了内存,所以string1为nil。声明为weak的指针,指针指向的地址一旦被释放,这些指针都将被赋值为 nil。这样的好处能有效的防止野指针。在c/c++开发过程中,指针的空间释放了后,都要将指针赋为NULL. 在这儿用weak关键字做了这一步。
总之,这些需要区分开,对于属性构造方法有很大帮助,可以省去许多麻烦。
0 0
- 认识retain copy assign strong weak 的区别
- 认识retain copy assign strong weak 的区别
- strong assign weak retain copy 区别
- copy,assign,strong,retain,weak,readonly,nonatomic的区别
- copy,assign,strong,retain,weak,readonly,nonatomic的区别
- retain、copy、assign、 strong、weak、autorelease的用法和区别
- copy,assign,strong,retain,weak,readonly,nonatomic的区别
- copy,assign,strong,retain,weak,readonly,nonatomic的区别
- copy,assign,strong,retain,weak,readonly,nonatomic的区别
- copy,assign,strong,retain,weak,readonly,nonatomic的区别
- copy,assign,strong,retain,weak,readonly,nonatomic的区别
- copy,assign,strong,retain,weak,readonly,nonatomic的区别
- assign、copy、retain、weak、strong的区别与联系
- copy,assign,strong,retain,weak,readonly,nonatomic的区别
- iOS开发-assign、retain、copy、strong、weak的区别
- copy,assign,strong,retain,weak,readonly,nonatomic的区别
- 个人整理weak、assign、strong、copy、retain的区别
- iOS开发之assign retain copy strong weak 的区别
- Linux命令行设置IP地址和DNS
- 黑马程序员——Java语言基础(上)
- App store 发布,64位问题,Missing 64-bit support
- C++11新特性(持续更新)
- c语言特点
- 认识retain copy assign strong weak 的区别
- android实现课程表界面
- poj 食物链 数据结构 并查集
- iOS屏幕尺寸和分辨率了解
- 项目第三天
- makefile之概括
- 【菜鸟学Java】7:JSP的基本语法
- js回调函数
- Linux——Linux权限