iOS巧用copy和mutableCopy

作者: 充电实践 | 来源:发表于2016-12-18 12:23 被阅读0次

1.导言

1).本文目标:为从事iOS开发的朋友介绍对象拷贝的使用场景

2).目标用户:初级或中级iOS开发者

2.什么是copy和mutableCopy

copy,又名浅拷贝:只是复制对象的引用,并没有复制对象的具体内容。

mutableCopy,又名深拷贝:复制了对象的具体内容,并返回对象副本的引用。

进一步解释可以这样去理解:copy方法可以复制可变对象或不可变对象的不可变副本,对于不可变对象副本,其对象的值不可以改变。

mutableCopy方法可以复制可变对象或不可变对象的可变副本,对于可变对象副本其对象是可变的。

3.什么场景下使用二者

举个例子,实际项目中,有个对象,在两个不同的函数中使用了,而这两个函数有可能不是互相等待执行完后再执行下一个。

-(void)sync

{

[self test1:对象];

异步执行[self test2:对象];

}

-(void)test1:(对象);

-(void)test2:(对象);

以上几个函数,在sync中分别调用了test1和test2,而这两个函数都是直接对某个对象直接做了处理。如果sync没有加锁,多次调用后,由于test2是异步执行的,特test1和test2中如果都对对象做了类似remove数组等的操作,此时同一个对象就有可能产生crash现象,或者与预期结果不一样。

这种情况下,最好的方式就是使用mutableCopy方法,深度拷贝对象,互不干扰。

4.具体实践

1.不可变的字符串的copy

NSString*str =@"test1";

NSString*copyStr = [str copy];

NSLog(@"str = %s copyStr= %s",str,copyStr);

NSLog(@"指针地址:str = %@ copyStr= %@",&str,©Str);

输出结果:str =0x113d94034 copyStr=0x113d94034

指针地址:str =0x8fee679e7ba4 copyStr=0x8fee679e7bf3

由此得到对于不可变的字符串的copy,对象的内存地址没有改变,而是指针的地址改变了。

2.可变的字符串的copy

相同的方式我们对NSMutableString进行copy,会得到以下结论:

对于可变字符串的copy,直接拷贝了对象。

3.不可变字符串的mutableCopy

我们对NSString对象进行mutableCopy,默认进行了深拷贝。

4.可变字符串的mutableCopy

我们对NSMutableString对象进行mutableCopy,会进行深拷贝。

5.总结

此外对自定义对象的copy与mutableCopy,大家可以去尝试,网上有很多资料供大家参考。在项目实际开发过程中,针对不对的需求,巧妙使用这两个方法,可以达到事半功倍的效果。

相关文章

  • iOS巧用copy和mutableCopy

    1.导言 1).本文目标:为从事iOS开发的朋友介绍对象拷贝的使用场景 2).目标用户:初级或中级iOS开发者 2...

  • iOS开发之copy

    iOS中copy有两种copy和mutableCopy

  • copy与mutablecopy使用对比

    杂七杂八 copy和mutableCopy都是浅拷贝!!!iOS中的copy,mutableCopy,深拷贝和浅拷...

  • iOS 内存(系统引用的技术)了解

    iOS程序的内存布局 Tagged Pointer OC对象的内存管理 copy和mutableCopy

  • 【iOS】copy和mutableCopy

    NSString NSString copy 没有生成新的字符串 NSString mutableCopy 生成了...

  • iOS copy和mutableCopy

    一、copy (1)用copy修饰的 或者赋值的 变量肯定是不可变的。 (2)用copy赋值,要看源对象是否是可变...

  • iOS copy和mutableCopy

    经测试得出如下结论:【测试代码和测试结果见后面】 不管是非集合类对象,还是集合类对象,执行copy之后的对象,不管...

  • iOS copy和mutableCopy

    心得:不管是copy还是mutableCopy,目的都是拷贝出来一个新的对象,并且值都不变。 由于值不变所以: 只...

  • iOS copy 和 mutableCopy

    copy 和mutableCopy 这种老生常谈的问题,还是得掰扯掰扯 之前在我们的意识当中 copy 和muta...

  • iOS开发深拷贝与浅拷贝的关系

    IOS开发之深拷贝与浅拷贝(mutableCopy与Copy)详解 copy与retain的区别: copy是创建...

网友评论

    本文标题:iOS巧用copy和mutableCopy

    本文链接:https://www.haomeiwen.com/subject/tyiamttx.html