对copy、mutableCopy理解】的更多相关文章

Copy&mutableCopy   通过copy方法可以创建可变或不可变对象的不可变副本,通过mutableCopy可以创建可变或不可变对象的可变副本. 拷贝分为浅拷贝和深拷贝: 浅拷贝:指针拷贝,对一个对象进行浅拷贝,相当于对指向该对象的指针进行复制,产生一个新的指向这个对象的指针.当一个对象销毁后,两个指针都应该置空. 深拷贝:内容拷贝,增加一个指针并且申请一个新的内存,使这个新增的指针指向这个新的内存.使用深拷贝不会出现浅拷贝时重复释放同一块内存的错误!   Not to say, sh…
Objective - C 中有很多在日常项目中经常用到的常用代码,在这里着重的讲一下关于copy 和 mutableCopy 的区别以及相关用法. Objective - C 中可变对象和不可对象经常用的如下: NSString. NSMutableString | NSArray.NSMutableArray, 分开说: A:NSString. NSMutableString 二者的copy方法返回类型为: [NSString copy]                         浅拷…
写在前面 其实看了这么多,总结一个结论: 拷贝的初衷的目的就是为了:修改原来的对象不能影响到拷贝出来得对象 && 修改拷贝出来的对象也不能影响到原来的对象 所以,如果原来对象就是immutable的,然后用使用copy,生成的对象也还是immutable的,原来和现在的对象都是不可变的,所以就没有必要单独在内存中开辟存储空间,既生成新的对象了.所以这样生成的叫浅拷贝(shallow copy). -----------------------------------------------…
copy总是返回不能被修改的对象,mutableCopy返回可以被修改的对象 例: NSArray *array = @[@"test", @"test2"]; NSMutableArray *arrayMu = [array copy];// arrayMu实际上被赋值成一个 NSArray 对象,这是如果调用NSMutableArray特有的方法会crash,例如[arrayMu removeObject:@"test"]; NSMutabl…
copy retain assign的差别在于对象属性的set方法 NSString 与 NSMutableString NSString是不可变字符串对象,这句话的意思,结合代码: #import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { @autoreleasepool { NSString *str = @"Shaw"; NSString *str1 = @"Roo…
1.使用copy或mutableCopy方法可以创建一个对象的副本. copy: (1)需要实现NSCoppying协议 (2)创建的是不可变副本(如NSString.NSArray.NSDictionary) mutableCopy: (1)需要先实现NSMutableCopying协议 (2)创建的是可变副本(如NSMutableString.NSMutableArray.NSMutableDictionary) [备注]Copy的目的是建立副本,同时修改原始对象和复本不会互相干扰 2.深复…
首先直接上结论: —–我们寻常意义的复制就是深复制,即将被复制对象完全再复制一遍作为独立的新个体单独存在.所以改变原有被复制对象不会对已经复制出来的新对象产生影响. —–而浅复制并不会产生一个独立的对象单独存在,他只是将原有的数据块打上一个新标签,所以当其中一个标签被改变的时候,数据块就会发生变化,另一个标签也会随之改变.这就和我们寻常意义上的复制有所不同了. 对于简单的 object,用 shallow copy 和 deep copy 没区别 复杂的 object, 如 list 中套着 l…
copy与mutableCopy都是深拷贝,区别是mutableCopy拷贝出的对象是可变的. OC对象基本都是通过指针访问,所以一般情况下,通过对指针的赋值都是浅拷贝,即只是拷贝了一份对象的指针,对象还是只有一个. 例: NSMutableString *str = [NSMutableString stringWithString:@"abc"]; NSString *str2 = str; str与str2指向的是同一个对象,str变了str2随之改变. NSMutableArr…
依旧本着尊重原创和劳动者的原则,将地址先贴在前面: http://www.cnblogs.com/nonato/archive/2013/11/28/3447162.html,作者Nonato 以下内容为转载: IOS的对象都继承于NSObject, 该对象有一个方法:retainCount ,内存引用计数. 引用计数在很多技术都用到: window下的COM组件,多线程的信号量,读写锁,思想都一样. (一般情况下: 后面会讨论例外情况)alloc 对象分配后引用计数为1retain 对象的引用…
在python里对对象进行拷贝有三个,即赋值,深拷贝,浅拷贝. 而对象又分为两种,一种是不可变对象(字符串.元组.数字 ),一种是可变对象(列表.字典). 而深浅拷贝有三种情况:拷贝的是不可变对象.拷贝的是可变对象.拷贝的可变对象里面还有子对象 拷贝不可变对象 import copy list0 = 'hello,world' list1 = copy.copy(list0) list2 = copy.deepcopy(list0) list3 = list0 print(list0, id(l…