copy-mutableCopy
copy和mutableCopy语法的目的:改变副本的时候,不会影响到源对象;调用Copy产生的对象是不可变的,调用mutableCopy产生的对象是可变的,与调用对象是否可变无关。
Copy 需要先实现NSCoppying协议,创建的是不可变副本(如字符串、数组、字典)。
mutableCopy 需要先实现NSMutableCopying协议,创建的是可变副本(如可变字符串、可变数组、可变字典)。
如果想自定义copy,那么就必须遵守NSCopying,并且实现copyWithZone:方法。
如果想自定义mutableCopy,那么就必须遵守NSMutableCopying,并且实现mutableCopyWithZone:方法。
1、不可变字符串的mutableCopy(深拷贝):// 深拷贝:内容拷贝,会产生新的对象。新对象计数器置为1,源对象计数器不变。
NSString *string = [[NSString alloc] initWithFormat:@"age is %i", ];
NSMutableString *str = [string mutableCopy]; // 产生了一个新的对象,计数器为1。源对象的计数器不变; str和string不是相同对象。
2、不可变字符串的copy(浅拷贝):// 浅拷贝:指针拷贝,不会产生新的对象。源对象计数器+1。只有一种情况是浅拷贝:不可变对象调用copy方法时。
NSString *string = [[NSString alloc] initWithFormat:@"age is %i", ];
NSString *str = [string copy]; // copy产生的是不可变副本,由于源对象本身就不可变,所以为了性能着想,copy会直接返回源对象本身; 源对象计数器会+1; 在浅拷贝情况下,copy其实就相当于retain.
3、可变字符串的copy(深拷贝):
NSMutableString *string = [NSMutableString stringWithFormat:@"age is %i", ];
NSString *str = [string copy]; // 会产生一个新对象,str计数器为1。
4、可变字符串的MutableCopy(深拷贝):
NSMutableString *string = [NSMutableString stringWithFormat:@"age is %i", ];
NSMutableString *str = [string mutableCopy]; //会产生一个新对象,str计数器为1。
5、@property中的参数copy策略:
@property (nonatomic, copy) NSString *name;
// copy代表set方法会release旧对象、copy新对象
// 修改外面的变量,并不会影响到内部的成员变量
// 建议:NSString一般用copy策略,其他对象一般用retain
6、对象的copy:
Student *stu1 = [Student studentWithName:@"stu1"];
Student *stu2 = [stu1 copy];
copy-mutableCopy的更多相关文章
- iOS copy&mutableCopy理解
Copy&mutableCopy 通过copy方法可以创建可变或不可变对象的不可变副本,通过mutableCopy可以创建可变或不可变对象的可变副本. 拷贝分为浅拷贝和深拷贝: 浅拷贝:指 ...
- objective c,copy, mutableCopy区别
copy总是返回不能被修改的对象,mutableCopy返回可以被修改的对象 例: NSArray *array = @[@"test", @"test2"]; ...
- NSString NSMutableString copy mutableCopy retain weak strong整合
copy retain assign的差别在于对象属性的set方法 NSString 与 NSMutableString NSString是不可变字符串对象,这句话的意思,结合代码: #import ...
- iOS开发之Copy & MutableCopy及深复制 & 浅复制
1.使用copy或mutableCopy方法可以创建一个对象的副本. copy: (1)需要实现NSCoppying协议 (2)创建的是不可变副本(如NSString.NSArray.NSDictio ...
- OC copy mutableCopy, 浅拷贝,深拷贝
copy与mutableCopy都是深拷贝,区别是mutableCopy拷贝出的对象是可变的. OC对象基本都是通过指针访问,所以一般情况下,通过对指针的赋值都是浅拷贝,即只是拷贝了一份对象的指针,对 ...
- copy&mutableCopy 浅拷贝(shallow copy)深拷贝 (deep copy)
写在前面 其实看了这么多,总结一个结论: 拷贝的初衷的目的就是为了:修改原来的对象不能影响到拷贝出来得对象 && 修改拷贝出来的对象也不能影响到原来的对象 所以,如果原来对象就是imm ...
- iOS开发-retain/assign/strong/weak/copy/mutablecopy/autorelease区别
依旧本着尊重原创和劳动者的原则,将地址先贴在前面: http://www.cnblogs.com/nonato/archive/2013/11/28/3447162.html,作者Nonato 以下内 ...
- 关于:1.指针与对象;2.深浅拷贝(复制);3.可变与不可变对象;4.copy与mutableCopy的一些理解
最近对深浅拷贝(复制)做了一些研究,在此将自己的理解写下来,希望对大家有所帮助.本人尚处在摸索阶段,希望各位予以指正. 本文包括如下方向的探索: 1.指针与对象: 2.深/浅拷贝(复制): 3.可变/ ...
- iOS 浅谈:深.浅拷贝与copy.strong
深.浅拷贝 copy mutableCopy NSString NSString *string = @"汉斯哈哈哈"; // 没有产生新对象 NSString *copyStri ...
- Objective -C学习笔记 之copy(复制)
//自定义类对象实现copy需要遵守copy协议(否则程序崩溃),实现必须实现的协议方法,里面的代码就决定了你的copy是深是浅 #import <Foundation/Foundation.h ...
随机推荐
- 手机NFC模拟门禁卡
楼主所在的某电子科技类大学,从宿舍楼到实验楼到图书馆办公楼,全部都有门禁,前两天突然在某安软件市场看到一个可以模拟门禁卡的软件,然而可能是我的手机系统太6了,竟然模拟不了,无奈自己动手,从根本上解决问 ...
- git贡献代码流程
1.本地创建ssh key: $ ssh-keygen -t rsa -C "your_email@youremail.com" 2.回到github,进入Account Sett ...
- poj1001_Exponentiation
这题真是超级大模拟.好繁琐,自己写的打数加法,乘法,写的比我大一时候写的要好很多,大一是借助C++里面的string来写的,这把只用了C,浇一次就ac了,挺开心的,不过写了2个小时啊.注意零的处理.大 ...
- JavaScript编程规范
最近看NodeJS中,有一部分写JS约定俗成的编程规范(附录B,详情参考附件),感觉在实际工作中能用到, 大致意思分享给大家,详情参考附件: 1.缩进:建议两空格 作为Node.js代码的缩进标记: ...
- grub丢失的修复
使用安装光盘进入rescure模式,经过配置后进入一个bashbash# grubgrub> root (hd0,6)grub> setup (hd0)重启即可
- repeater标签双重循环的使用
在网站开发中,.NET中的repeater标签几乎是笔者首选,也是唯一一个不会生成多余元素的标签,所有样式都是自定义的,这点类似 struts中的<s:iterator/>标签. 在日常编 ...
- javaSE第二十五天
第二十五天 399 1:如何让Netbeans的东西Eclipse能访问. 399 2:GUI(了解) 399 (1)用户图形界面 399 (2)两个包: 399 (3) ...
- ArcMap中用VBA读度矢量图层信息
ArcMap下用VBA操作图层基本的过程了. Private Sub UIButtonControl1_Click() Dim pApp As IApplication Set pApp = Appl ...
- 移植u-boot-1.1.6(原创)
#u-boot:u-boot-1.1.6#server:ubuntu 12.04#gcc: arm-linux-gcc -4.3.2# 一.建立单板1> /board/smdk2410 : cp ...
- cpack
一. 简介 CPack是CMake 2.4.2之后的一个内置工具,主要作用就是生成制定类型的安装包.它可以脱离cmake单独运行. 二. 基本设置 (mandatory) 设置包类型set(CPACK ...