文档章节

OC高效率52之理解NSCopying协议

阿元
 阿元
发布于 2016/02/27 21:44
字数 163
阅读 33
收藏 0
#import <Foundation/Foundation.h>

@interface EOCPerson : NSObject<NSCopying,NSMutableCopying>
@property (nonatomic, copy , readonly) NSString *firstName;
@property (nonatomic, copy , readonly) NSString *lastName;
-(id)initWithFirstName:(NSString *)firstName
           andLastName:(NSString *)lastName;
-(void)addFriend:(EOCPerson *)person;
-(void)removeFriend:(EOCPerson *)person;

@end

#import "EOCPerson.h"

@implementation EOCPerson
{
    NSMutableSet *_friend;
}

-(id)initWithFirstName:(NSString *)firstName andLastName:(NSString *)lastName{
    if (self = [super init]){
        _friend = [NSMutableSet new];
        _lastName = [lastName copy];
        _firstName = [firstName copy];
    }
    return self;
}

-(void)addFriend:(EOCPerson *)person{
    [_friend addObject:person];
}
-(void)removeFriend:(EOCPerson *)person{
    [_friend removeObject:person];
}
/**
 *  NSCopying
 *
 *  @param zone
 *
 *  @return
 */
-(id)copyWithZone:(NSZone *)zone{
    EOCPerson *person = [[[self class] allocWithZone:zone]initWithFirstName:_firstName
                                                                andLastName:_lastName];
    person->_friend = [_friend mutableCopy];
    return person;
}
/**
 *  NSMutableCopying
 */
-(id)mutableCopyWithZone:(NSZone *)zone{
    return nil;
}
/**
 *  深拷贝
 */
-(id)deepCopy{
    EOCPerson *copy = [[[self class]alloc]initWithFirstName:_firstName
                                                andLastName:_lastName];
    copy->_friend = [[NSMutableSet alloc]initWithSet:_friend copyItems:YES];
    
    return copy;
}
@end

详谈深浅拷贝:

参考文章链接:http://www.cnblogs.com/langtianya/p/3722129.html

© 著作权归作者所有

共有 人打赏支持
阿元
粉丝 5
博文 159
码字总数 105229
作品 0
浦东
程序员
iOS OC NSCopying 协议

一 NSCopying 协议 想让自己的类支持拷贝操作(copy),就需要实现NSCopying协议,该协议中有个方法: zone是之前开发程序程序时,会把内存分成不同的 zone ,而对象会创建在zone 中。现在不用...

卧龙小
2015/07/11
128
0
OC学习篇之---对象的拷贝

在前一篇文章中我们说到了如何解决对象的循环引用问题:http://blog.csdn.net/jiangwei0910410003/article/details/41926369,这一篇文章我们就来介绍一下OC中的对象拷贝概念,这个对于面向对...

jiangwei0910410003
2014/12/14
0
0
Object-C基础-08-protocol

一、 简单使用 1. 基本用途 可以用来声明一大堆方法(不能声明成员变量) 只要某个类遵守了这个协议,就相当于拥有这个协议中的所有方法声明 只要父类遵守了某个协议,就相当于子类也遵守了 ...

Corwien
2016/03/20
36
0
编写高质量iOS与OS X代码的52个有效方法(上篇)

第一章 熟悉Objective-C 1. 了解Objective-C语言的起源 Objective-C(以下简称OC)是C语言的超集,相比C语言多了面向对象的特性。OC使用动态绑定的消息结构,换句话说,只有在运行时才会检查...

还是不够辣
2017/04/06
0
0
04 - Object-C协议与代理设计

一、 简单使用 1. 基本用途 可以用来声明一大堆方法(不能声明成员变量) 只要某个类遵守了这个协议,就相当于拥有这个协议中的所有方法声明 只要父类遵守了某个协议,就相当于子类也遵守了 ...

口十耳
2015/12/29
21
0

没有更多内容

加载失败,请刷新页面

加载更多

活动推荐|互联网3.0与区块链新时代论坛(北京)

1 时间地点 **时间:**9月22日 14:00 - 18:00 地点:(北京海淀)西大街70号 3w咖啡 二层 2 活动详情 Harmony创始人Stephen及团队将介绍他们的区块链分片扩容技术。Stephen曾任Apple地图服务...

HiBlock
39分钟前
1
0
如何优雅的删除Redis的大key

关于Redis大键(Key),我们从[空间复杂性]和访问它的[时间复杂度]两个方面来定义大键。前者主要表示Redis键的占用内存大小;后者表示Redis集合数据类型(set/hash/list/sorted set)键,所含有的...

IT--小哥
49分钟前
1
0
spring cloud学习笔记

工具 eclipse 4.9 gradle 4.10.2 spring cloud Finchley.SR1 spring boot 2.0.4 build.gradle buildscript {ext {springBootVersion = '2.0.4.RELEASE'}repositories {jcenter()......

bobby2006
51分钟前
1
0
Tcl命令操作实验-----(5)

Vivado% proc myproc {arg} {puts $arg}Vivado% myproc mynamemynameVivado% if {2>1} {puts 2>1} else {puts 2<1}2>1...

whoisliang
今天
1
0
比特币钱包RPC的PHP调用方法

当我们希望在Php开发的网站中加入比特币支付功能时,需要解决的第一个 问题,就是如何在Php程序代码中调用比特币钱包的RPC API开发接口来实现 我们期望的功能,例如比特币的支付与接收。 例如...

汇智网教程
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部