码迷,mamicode.com
首页 > 其他好文 > 详细

retain、strong和copy测试

时间:2015-05-04 10:00:02      阅读:132      评论:0      收藏:0      [点我收藏+]

标签:

时不时会有点迷惑retain、strong、copy三者之间的区别,还是记录下来好一点,先看代码:

创建一个类,定义属性

#import <Foundation/Foundation.h>

@interface Person : NSObject

@property (nonatomic, retain) NSString *strRetain;
@property (nonatomic, strong) NSString *strStrong;
@property (nonatomic, copy) NSString *strCopy;
@property (nonatomic, retain) NSMutableString *strMutableRetain;
@property (nonatomic, strong) NSMutableString *strMutableStrong;
@property (nonatomic, copy) NSMutableString *strMutableCopy;

@end

main方法里面代码:

Person *per = [[Person alloc] init];
    NSString *name = @"原XM";
    [per setStrRetain:name];
    [per setStrStrong:name];
    per.strCopy = name;
    
    NSMutableString *name2 = [[NSMutableString alloc] initWithString:@"原XM2"];
    per.strMutableRetain = name2;
    per.strMutableStrong = name2;
    per.strMutableCopy = name2;
    
    NSLog(@"------ 改变之前打印 ------");
    NSLog(@"per.strRetain: %@, ", per.strRetain);
    NSLog(@"per.strStrong: %@", per.strStrong);
    NSLog(@"per.strCopy: %@", per.strCopy);
    NSLog(@"per.strMutableRetain: %@", per.strMutableRetain);
    NSLog(@"per.strMutableStrong: %@", per.strMutableStrong);
    NSLog(@"per.strMutableCopy: %@", per.strMutableCopy);
    
    name = @"新XM";
    [name2 appendString:@"新XM2"];
    
    NSLog(@"------- 改变之后打印 -------");
    NSLog(@"per.strRetain: %@", per.strRetain);
    NSLog(@"per.strStrong: %@", per.strStrong);
    NSLog(@"per.strCopy: %@", per.strCopy);
    NSLog(@"per.strMutableRetain: %@", per.strMutableRetain);
    NSLog(@"per.strMutableStrong: %@", per.strMutableStrong);
    NSLog(@"per.strMutableCopy: %@", per.strMutableCopy);

打印结果:

 ------ 改变之前打印 ------
per.strRetain: 原XM, 
per.strStrong: 原XM
per.strCopy: 原XM
per.strMutableRetain: 原XM2
per.strMutableStrong: 原XM2
per.strMutableCopy: 原XM2
------- 改变之后打印 -------
per.strRetain: 原XM
per.strStrong: 原XM
per.strCopy: 原XM
per.strMutableRetain: 原XM2新XM2
per.strMutableStrong: 原XM2新XM2
per.strMutableCopy: 原XM2

结论:

1、对于不可变对象来说:retain、strong、copy三者的作用是一样的,即当引用的原对象值改变后,其他引用该对象的属性值不会受影响,还是保持原来的值;

2、对于可变对象来说:retain、strong和copy的作用就有区别了,使用retain、strong修饰的属性,当引用的原对象值改变后,其他引用该对象的属性值会一起跟着变化,而copy修饰的属性的值还是保持原样。copy的作用主要也是体现在这里: 让属性值不会随着原引用对象的值改变而改变;

3、retain和strong的区别:作用是一样的,只是写法上的区别。在非arc机制时,是用retain关键字修饰;在arc机制后,一般都用strong关键字来代替retain了

 

retain、strong和copy测试

标签:

原文地址:http://www.cnblogs.com/tandaxia/p/4475410.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!