文档章节

OC高效率52之理解NSCopying协议

阿元
 阿元
发布于 2016/02/27 21:44
字数 163
阅读 34
收藏 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
博文 163
码字总数 108443
作品 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

没有更多内容

加载失败,请刷新页面

加载更多

mysql 时间格式化

DATE_FORMAT

1713716445
4分钟前
0
0
聊聊flink的PartitionableListState

序 本文主要研究一下flink的PartitionableListState PartitionableListState flink-runtime_2.11-1.7.0-sources.jar!/org/apache/flink/runtime/state/DefaultOperatorStateBackend.java /*......

go4it
9分钟前
0
0
Micropython教程之TPYBoard开发板制作电子时钟(萝卜学科编程教育)

1.实验目的 1. 学习在PC机系统中扩展简单I/O?接口的方法。 2. 什么是SPI接口。 3. 学习TPYBoard I2C接口的用法。 4. 学习LCD5110接线方法。 5. 设定时钟并将当前时间显示在LCD5110上。 2.所需...

bodasisiter
9分钟前
0
0
js 闭包

闭包,是 Javascript 比较重要的一个概念,对于初学者来讲,闭包是一个特别抽象的概念,特别是 ECMAScript 规范给的定义,如果没有实战经验,很难从定义去理解它。因此,本文不会对闭包的概念...

MrBoyce
14分钟前
0
0
Java B2B2C o2o多用户商城 springcloud架-企业云架构common-service代码结构分析

当前的分布式微服务云架构平台使用Maven构建,所以common-service的通用服务按照maven构建独立的系统服务,结构如下: particle-commonservice: spring cloud 系统服务根项目,所有服务项目...

itcloud
19分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部