copy,strong,weak 简单使用
来源:互联网 发布:软件授权方法 编辑:程序博客网 时间:2024/05/22 09:49
最近在面试,很多面试问道了copy,strong,weak,对此我之前没有做过太多的研究,以至于很吃亏。
我们不仅仅要只是使用,更多的我们要理解。
比如声明的一个NSString *str变量,然后把一个NSMutableString *mStr变量的赋值给它了,如果要求str跟着mStr变化,那么就用retain;如果str不能跟着mStr一起变化,那就用copy。而对于要把NSString类型的字符串赋值给str,那两都没啥区别。不会影响安全性,内存管理也一样。
@property (retain,nonatomic) NSString *rStr;
@property (copy, nonatomic) NSString *cStr;
NSString * STRING =@"WWW.BAIDU.COM";
NSMutableString *mStr = [NSMutableString stringWithFormat:@"%@",STRING];
self.rStr = mStr;
self.cStr = mStr;
[mStr appendString:@"de"];
NSLog(@"mStr:%@", mStr);
NSLog(@"retainStr:%@", _rStr);
NSLog(@"copyStr:%@", _cStr);
打印数据:
WWW.BAIDU.COMde
WWW.BAIDU.COMde
WWW.BAIDU.COM
NSMutableArray *array = [NSMutableArray arrayWithObjects:@"hello",@"world",@"baby",nil];
NSArray *array2 = [array copy];
[array removeAllObjects];
CFShow((__bridge CFTypeRef)(array2));
CFShow((__bridge CFTypeRef)(array));
打印数据:
(
hello,
world,
baby
)
(
)
可以看出copy是一种复制,对数据进行的复制。
weak and strong property (强引用和弱引用的区别)
只有一种情况你需要使用weak(默认是strong),就是为了避免retain cycles(就是父类中含有子类{父类retain了子类},子类中又调用了父类{子类又retain了父类},这样都无法release)
具体一点:IBOutlet可以为weak,NSString为copy,Delegate一般为weak,其他的看情况。一般来说,类“内部”的属性设置为strong,类“外部”的属性设置为weak。说到底就是一个归属权的问题。小心出现循环引用导致内存无法释放
- strong:等同于"retain",属性成为对象的拥有者
- weak:属性是 weak pointer,当对象释放时会自动设置为 nil
- unsafe_unretained:等同于之前的"assign",只有 iOS 4 才应该使用
- copy:和之前的 copy 一样,复制一个对象并创建 strong 关联
- assign:对象不能使用 assign,但原始类型(BOOL、int、float)仍然可以使用
@property (nonatomic,strong) NSString *string1;
@property (nonatomic,weak) NSString *string2;
NSString *string111 = [[NSString alloc] initWithFormat:@"dasdasdasda"];
self.string2 = string111;
string111 = @"aaaaa";;
NSLog(@"String 2 = %@", self.string2); //String 2 = (null)
NSString *string121 = @"dasdas";
self.string2 = string121;
string121 = nil;
NSLog(@"String 2 = %@", self.string2); //String 2 = dasdas
alloc创建的对象堆内存,栈内存由系统来管理
对于动态分配我们可以去处理,对于weak的弱引用请看:http://m.blog.csdn.net/blog/q199109106q/8565017
在过程中我们还遇到一个好玩的
NSString *string111 = [[NSString alloc] initWithFormat:@"dasdasdasda"];
self.string2 = string111;
self.string1 = string111;
string111 = nil;
NSLog(@"String 2 = %@", self.string2); //String 2 = dasdasdasda
NSLog(@"string 1 = %@", self.string1); //String 2 = dasdasdasda
我们在中间对string1进行了一次赋值,就出现了这种情况,怎么回事?
我想strong属性应该是给我们开了一个玩笑,strong=retain,在这时候不仅仅复制了控件内容,还复制了控件地址。
个人研究理解:如有错误,请留言指正
- copy,strong,weak 简单使用
- ios copy/strong/weak..使用总结
- NSString 什么时候使用copy、strong、weak
- ios copy/strong/weak..使用总结
- ios copy/strong/weak..使用总结
- copy、strong、weak、assign
- 什么情况下我们使用copy,assign,retain,strong,weak?
- IOS中@property中strong,weak,assgin,copy使用场景
- 何时使用copy,strong,weak,assign关键字 定义属性
- strong/weak/assign/copy/retain
- copy weak strong assign等等
- weak strong copy retain大杂烩
- strong assign weak retain copy 区别
- copy, weak, strong, assign 的用法
- @propeerty中retain assign copy weak strong
- @property 下 strong weak copy assign
- copy,retain,weak,strong等的总结
- copy strong assign weak retain 的用法
- 邮件营销"灵魂"三境界:利、惠、感
- 第六届蓝桥杯C/C++A组第五题解答
- 关于手势需要注意的知识点
- HttpServletRequestWrapper和HttpServletResponseWrapper详解
- 利用Attribute和IErrorHandler处理WCF全局异常
- copy,strong,weak 简单使用
- 开启Linux之旅--Windows本机连接远程Linux主机
- CentOS 6.6 Minimal设置VirtualBox的共享文件夹
- Mat - 基本图像容器
- 编译、链接和加载
- weblogic获取客户端真实IP方法
- git submodule的使用
- RecyclerView实现Item滑动加载进入动画效果
- 21分钟 MySQL 入门教程