谈谈IOS开发的NSCopying和NSMutableCopying协议的理解和基本使用
来源:互联网 发布:软件开发必备工具 编辑:程序博客网 时间:2024/05/19 14:39
看完NSCopying和NSMutableCopying的文章后,自己总结了一下,形成文档,方便后续完善,也希望能够帮助这方便有疑惑的小伙伴。
但是如果想对复制的对象的某些可变元素做修改(比如NSMutableArray增加或者删除元素),必须使用NSMutableCopying协议;
首先,必须明确并不是所有的类都支持Copy协议的,也就说大部分的类并不支持复制操作(Copy),但是常见的NSString、NSArray、NSDictionary等还是支持复制操作的。
至于NSCopying和NSMutableCopying的区别,简单来说,就是NSMutableCopying复制的数据支持可变性。
附上我的代码,后面我会稍微说明下
NDYTestCopyFirstObject.h
#import <Foundation/Foundation.h>@interface NDYTestCopyFirstObject : NSObject<NSCopying,NSMutableCopying>@property (nonatomic, assign) UInt8 age;@property (nonatomic, strong) NSString *userName;@property (nonatomic, strong) NSString *address;@property (nonatomic, strong) NSMutableArray *theFriends;@property (nonatomic, strong) NSMutableString *theMutableStr;@end
NDYTestCopyFirstObject.m
#import "NDYTestCopyFirstObject.h"@implementation NDYTestCopyFirstObject- (id)init { self = [super init]; if (self) { self.theFriends = [NSMutableArray arrayWithObjects:@"first",@"second",@"third", nil]; self.theMutableStr = [NSMutableString stringWithString:@"Hello"]; } return self;}- (id)copyWithZone:(NSZone *)zone { NDYTestCopyFirstObject *instance = [[NDYTestCopyFirstObject alloc] init]; if (instance) { instance.age = self.age; instance.userName = [self.userName copyWithZone:zone]; instance.address = [self.address copyWithZone:zone]; instance.theFriends = [self.theFriends copyWithZone:zone]; instance.theMutableStr = [self.theMutableStr copyWithZone:zone]; } return instance;}- (id)mutableCopyWithZone:(NSZone *)zone { NDYTestCopyFirstObject *instance = [[NDYTestCopyFirstObject alloc] init]; if (instance) { instance.age = self.age; instance.userName = [self.userName mutableCopyWithZone:zone]; instance.address = [self.address mutableCopyWithZone:zone]; instance.theFriends = [self.theFriends mutableCopyWithZone:zone]; instance.theMutableStr = [self.theMutableStr mutableCopyWithZone:zone]; } return instance;}- (NSString *)description { NSString *dis = [NSString stringWithFormat:@"\nuserName:%@ address:%@ age:%d %@ friends:%@\n",self.userName,self.address,self.age,self.theMutableStr,self.theFriends]; return dis;}
</pre><pre name="code" class="objc">具体使用 NDYTestCopyFirstObject *obj1 = [[NDYTestCopyFirstObject alloc] init]; obj1.userName = @"first name"; obj1.address = @"first address"; obj1.age = 15; NDYTestCopyFirstObject *obj2 = [obj1 mutableCopy];// NDYTestCopyFirstObject *obj2 = [obj1 copy]; NSLog(@"%@%@%p %p\n",obj1,obj2,&obj1,&obj2); obj2.userName = @"second name";// obj2.age = 25;// obj2.address = @"second address"; //Mutable [obj2.theFriends addObject:@"fourth"]; [obj2.theMutableStr appendString:@" World"]; NSLog(@"%@%@%p %p\n",obj1,obj2,&obj1,&obj2);
但是如果想对复制的对象的某些可变元素做修改(比如NSMutableArray增加或者删除元素),必须使用NSMutableCopying协议;
实现NSCopying协议必须实现方法: - (id)copyWithZone:(NSZone *)zone
实现NSMutableCopying协议必须实现方法: - (id)mutableCopyWithZone:(NSZone *)zone
0 1
- 谈谈IOS开发的NSCopying和NSMutableCopying协议的理解和基本使用
- NSCopying和NSMutableCopying协议
- ios开发——NSCopying与NSMutableCopying协议
- ios开发——NSCopying与NSMutableCopying协议
- <NSCopying>和 <NSMutableCopying>协议 深拷贝 浅拷贝
- 19 NSCopying与NSMutableCopying协议+深复制和浅复制
- 对象的拷贝(NSCopying/NSMutableCopying)
- iOS中几个常用协议 NSCopying/NSMutableCopying
- NSCopying/NSMutableCopying
- iOS模型copy < NSCopying, NSMutableCopying >实现
- NSCopying协议的使用,setter和getter方法的作用,内存管理高级,集合的内存管理
- iOS开发中关于继承、扩展和协议的理解
- NSCopying协议和copy方法
- NSCopying协议和copy方法
- 谈谈我网络分层协议的理解和问题
- 谈谈我对协议栈设计和架构的理解
- 谈谈我对协议栈设计和架构的理解
- Objective-c的NSCopying协议
- ASP.NET MVC 4 插件化架构简单实现-实例篇
- springmvc web项目搭建
- mac下Android开发环境搭建
- 枚举给定期间内的季度信息
- JS光标处理以及返回光标的下一个字符方法介绍
- 谈谈IOS开发的NSCopying和NSMutableCopying协议的理解和基本使用
- python --数学函数记录
- Objective-c Literals语法(网上翻译为字面量,我称之为@语法 at符号语法)
- Unix C (六)
- MySQL的REPLACE INTO
- 仿QQ锁屏界面效果
- MD5签名
- BCB Panel的线框效果
- 重构 改善既有代码的设计