关于声明属性Strong还是Copy的用法
来源:互联网 发布:linux tail 最后100行 编辑:程序博客网 时间:2024/05/21 11:21
对于属性声明时,尤其是对NSString的声明,不知道该用strong还是copy,也不清楚二者之间具体有何区别?接下来,我将从两方面来介绍下strong和copy的区别,分别是可变和不可变。
1.操作不可变对象的时候:
// 定义一个Person类@interface Person : NSObject@property (nonatomic, strong) NSArray *array1; //strong 类型@property (nonatomic, copy) NSArray *array2; //copy 类型@end@implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; NSMutableArray *testArr = [NSMutableArray arrayWithObject:@"test1"]; self.array1 =
testArr
self.array2 = testArr;
[books addObject:@"test2"];
NSLog(@"\n array1:%@ \n array2:%@",self.array1,self.array2);}@end
输出结果:
array1 :(
test1,
test2
)
array2 :(
test1
)
我们可以发现,在可变字符串赋值的情况下,strong类型的赋值,地址指向了原字符串地址,而copy类型的赋值却指向了另外一个地址,由此可见,在可变字符串赋值的情况下,copy进行了一次深拷贝,将原字符串重新复制了一份在磁盘中保存了下来。但是,我们发现虽然就复制了一份原字符串的值,但是类型并没有改变成可变字符串,而是保持了原有的不可变属性。
总结
在不可变字符串赋值中,strong和copy都是没有问题的,而在可变数组赋值中,我们大多数情况下不想因为赋值而改变了原有字符串的属性,所以我们日常工作中我们使用最多的还是copy属性。但是根据实际情况不同,也可以使用strong属性。
阅读全文
0 0
- 关于声明属性Strong还是Copy的用法
- 关于声明控件用weak和strong的问题&NSString用copy好还是strong
- 声明NSString属性用 Copy 与 strong 的区别
- 使用copy与strong声明NSString属性的区别
- 数组的属性修饰符到底用strong还是copy?
- iOS 属性修饰符strong还是copy?
- iOS 属性修饰符Copy 还是Strong
- NSString属性使用copy还是strong
- 初探 属性的copy、strong
- OC中与copy有关的那些事 一 (copy与声明NSString属性 : strong/copy 的关系)
- 数组字典字符串等作为属性的修饰符用strong还是copy?
- 初探属性的copy、strong 2
- property属性的weak,strong,copy,assign
- copy, weak, strong, assign 的用法
- copy strong assign weak retain 的用法
- copy strong assign weak retain 的用法
- ios-关于深拷贝和浅拷贝和属性中的copy和strong的区别
- ※※※@property声明的strong copy问题
- 多线程队列爬虫
- 开始翻译 oracle java document
- loadrunner性能指标
- Scala实现a~b f(x)函数
- 水平分库分表的关键问题及解决思路
- 关于声明属性Strong还是Copy的用法
- 文件名替换函数
- Android开发之OAuth 2.0浅析
- ORACLE数据库SQL语句的执行过程
- 使用POI读取word文档内容
- 【LintCode】1、A + B问题
- js reduce用法
- solr分组查询、统计功能详解
- Sarsa 与 Q learning对比