Copy 与MutableCopy的区别

NSString *string = @"origion";
NSString *stringCopy = [string copy];
NSMutableString *stringMCopy = [string mutableCopy];
[stringMCopy appendString:@"!!"];

上面这段代码中,需要注意的点:

1. retainCount对常量是无效的,数字会是个很大的数字。它对堆上的内存对象是正确的,对于栈上的常量无效。

2. copy指的是浅复制,只是复制指针。

3. mutableCopy是深复制,复制了对象到新的内存空间

4. mutableCopy出来的都是可变的(NSMutableString)

    NSMutableString *string = [NSMutableString stringWithString: @"origion"];
    NSMutableString *stringCopy = [string copy];
    [stringCopy appendString:@"!!"]; //ERROR
    NSMutableString *stringMCopy = [string mutableCopy];
    [stringMCopy appendString:@"!!"];

上面这段代码中,需要注意的点:

1. 无论copy的对象是Mutable的(NSMutableString)还是非Mutable的(NSString),copy出来的都是非Mutable的(NSString)。所以会崩溃

时间: 2024-08-03 21:37:57

Copy 与MutableCopy的区别的相关文章

copy 与 retain的区别,以及copy与mutablecopy的区别

copy 与 retain的区别 copy: 建立一个索引计数为1的对象,然后释放旧对象      retain:释放旧的对象,将旧对象的值赋予输入对象,再提高输入对象的索引计数为1 Copy其实是建立了一个相同的对象,而retain不是:比如一个NSString对象,地址为0×1111,内容为@”STR”, Copy到另外一个NSString之 后,地址为0×2222,内容相同,新的对象retain为1, 旧有对象没有变化 而retain到另外一个NSString之 后,地址相同(建立一个指针

Copy和MutableCopy

//    一: copy 与 retain 的区别 //    谁才有引用计数的概念: //    1. 堆区空间才有引用计数概念. //    2. 堆区的对象才会有引用计数. //%ld: - 1           %lu:18446744073709551615 //retain:始终是浅拷贝.引用计数每次加一. //返回对象是否可变与被复制的对象保持一致. //copy:对于可变对象为深拷贝,引用计数不改变; //对于不可变对象是浅拷贝,引用计数每次加一. //始终返回一个不可变对象

copy 和 mutableCopy

retain 和 copy 的区别. copy copy是通过旧对象创建一个新对象,新对象引用计数器为1,与旧对象的引用计数无关. retain retain是创建一个指针,对象引用计数加1.retain 出来的指针和原对象的指针指向的内存地址是相同的. 如何实现copy 并不是所有对象都可以进行copy.mutableCopy .对象如果可以被copy 则需要遵守NSCopying , 如果对象可以被mutableCopying 则需要遵从 NSMutableCopying.如果即可以被cop

Objective-C Objective-C中的指针,及对象的直接指向,copy和mutablecopy

1.Objective-C的指针世界 OC一直是人感觉比较变态的一门语言,为什么呢?因为它的每个变量都是指针型,多的都几乎让人忘了那个*的存在了. 所以常常a=b这个等号让我产生错觉,总以为a从b那拷贝了一份. 然而这的的确确,却是个指针.a这个变量存的内容是b所在的地址. 比如我定义了一个Student的Class,new了stu1和stu2,并把stu2=stu1,那当两者任何一个进行修改时,两个变量的内容都会修改. Student *stu1=[[Student alloc]init];

关于:1.指针与对象;2.深浅拷贝(复制);3.可变与不可变对象;4.copy与mutableCopy的一些理解

最近对深浅拷贝(复制)做了一些研究,在此将自己的理解写下来,希望对大家有所帮助.本人尚处在摸索阶段,希望各位予以指正. 本文包括如下方向的探索: 1.指针与对象: 2.深/浅拷贝(复制): 3.可变/不可变对象: 4.Objective-C中的copy与mutableCopy方法. 一.指针与对象 在初始学习编程的时候,对于绝大多数面向对象编程的语言,这都是个绕不开的重点与难点.非常惭愧的是对它的认识我一直是不够的,并且感觉这项技术有许多的内容可以挖掘.说这是面向对象编程的核心思想也不为过.很多

copy和mutableCopy到底是浅拷贝还是深拷贝?

请尊重原作者的辛苦劳动,转载请注明出处.http://blog.csdn.net/jslsblog/article/details/38563009 实践是检验真理的唯一标准.下面就让我们在实践中认识copy和mutableCopy的共同点和区别. 1.copy和mutableCopy的实现过程. 想要一个对象能实现copy首先要继承NSCopying的协议,然后实现+ (id)copyWithZone:(struct _NSZone *)zone,mutableCopy对应的是NSMutabl

iOS copy 和 mutableCopy 学习

(参考 iOS 52个技巧学习心得笔记 第二章 对象 , 消息, 运行期)的对象部分 关于Copy  有个经典问题”大部分的时候NSString的属性都是copy,那copy与strong的情况下到底有什么区别呢” 或者说”为什么 NSString 类型成员变量的修饰属性用 copy 而不是 strong (或 retain ) ?” 明显 第一句比第二句 严谨多了. @property (strong,nonatomic) NSString *strongString; & @property

Python字典方法copy()和deepcopy()的区别

1 from copy import deepcopy # import deepcopy模块 2 d = {} 3 d['name'] = ['black', 'guts'] # d = {'name': ['black', 'guts']} 4 c = d.copy() # c = {'name': ['black', 'guts']} 5 dc = deepcopy(d) # dc = {'name': ['black', 'guts']} 6 d['name'].append('whit

OC语法——Object-C retain、copy、mutableCopy的详细分析

OC语法中的retain.copy.mutableCopy 大家都基本知道它的基本意思,但是对于mutable类型和immutable类型的处理上有很多童鞋并没有真正测试过,今天就和大家分享下: 1.先来看下immutable类型的非容器类: NSString的retain.copy和mutableCopy的测试 NSString *string = @"abc"; NSString *retainString = [string retain]; NSString *copyStri