博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
oc83--自定义类实现copy方法
阅读量:6690 次
发布时间:2019-06-25

本文共 2378 字,大约阅读时间需要 7 分钟。

////  main.m//  自定义类实现copy#import 
#import "Person.h"#import "Student.h"int main(int argc, const char * argv[]) { /* 1.以后想让自定义的对象能够被copy只需要遵守NSCopying协议 2.实现协议中的- (id)copyWithZone:(NSZone *)zone 3.在- (id)copyWithZone:(NSZone *)zone方法中创建一个副本对象, 然后将当前对象的值赋值给副本对象即可 */ Person *p = [[Person alloc] init]; p.age = 30; p.name = @"lnj"; NSLog(@"%@", p); Person *p22 = [p copy];//p没有copy方法, Person *p2 = [p mutableCopy]; NSLog(@"%@", p2);//name= lnj, age = 30 NSLog(@"%@", p22);//name = lnj, age = 30 p.age = 100; p.name = @"ssss"; NSLog(@"%@", p2);//name= lnj, age = 30 NSLog(@"%@", p22);//name = lnj, age = 30 Student *stu = [[Student alloc] init]; stu.age = 30; stu.height = 1.75; stu.name = @"lnj"; NSLog(@"stu = %@", stu); // 如果想让子类在copy的时候保留子类的属性, 那么必须重写copyWithZone方法, 在该方法中先调用父类创建副本设置值, 然后再设置子类特有的值 Student *stu2 = [stu copy]; NSLog(@"stu2 = %@", stu2); return 0;}
////  Person.h#import 
@interface Person : NSObject
//才有copy方法,@property (nonatomic, assign) int age;@property (nonatomic, copy) NSString *name;@end
////  Person.m#import "Person.h"@implementation Person- (id)copyWithZone:(NSZone *)zone  //拷贝一个副本{    // 1.创建一个新的对象    Person *p = [[[self class] allocWithZone:zone] init];  //class方法,获取这个对象对应的类。    // 2.设置当前对象的内容给新的对象,拷贝的对象和原来对象的内容要一样,    p.age = _age;    p.name = _name;    // 3.返回新的对象    return p;}- (id)mutableCopyWithZone:(NSZone *)zone{    // 1.创建一个新的对象    Person *p = [[[self class] allocWithZone:zone] init];    // 2.设置当前对象的内容给新的对象    p.age = _age;    p.name = _name;    // 3.返回新的对象    return p;}- (NSString *)description{    return [NSString stringWithFormat:@"name = %@, age = %i", _name, _age];}@end
////  Student.h//#import "Person.h"@interface Student : Person  //子类继承父类,会继承父类的协议。@property (nonatomic, assign) double height;@end
////  Student.m#import "Student.h"@implementation Student- (id)copyWithZone:(NSZone *)zone{    // 1.创建副本    // id obj = [[self class] allocWithZone:zone];    id obj = [super copyWithZone:zone];    // 2.设置数据给副本//    [obj setAge:[self age]];//    [obj setName:[self name]];    [obj setHeight:_height];        // 3.返回副本    return obj;}- (NSString *)description{    return [NSString stringWithFormat:@"name = %@, age = %i, height = %f", [self name], [self age], _height];}@end

 

转载地址:http://jdkoo.baihongyu.com/

你可能感兴趣的文章
读取日志文件开发总结
查看>>
IOS --React Native
查看>>
Linux CPU
查看>>
Linux/Centos ntp时间同步,联网情况和无网情况配置
查看>>
初级网络运维工程师比赛题目
查看>>
跨交换机实现vlan实验报告
查看>>
jquery easyui滚动条部分设置介绍
查看>>
cannot find -lxxx问题
查看>>
预防云端开源项目打包 Redis Labs再更改模块
查看>>
超惊人!去年发生的身分外泄安全事件是2017的4倍
查看>>
oracle sqlplus免安装的配置instantclient-basiclite
查看>>
Java开发GUI之选择列表
查看>>
一、分布式商城架构逻辑图
查看>>
机器人是如何完成避障的?机器人避障解决方案解读
查看>>
通过错误堆栈信息和源码分析错误来源
查看>>
C和C++ 读写文件速度问题
查看>>
layer.mobile 弹出框插件(2.0版)
查看>>
IDC服务品质协议范本留存
查看>>
在 overlay 中运行容器 - 每天5分钟玩转 Docker 容器技术(51)
查看>>
前端MVC框架 EmberJS总结
查看>>