文档章节

OC高效率52之理解NSCopying协议

阿元
 阿元
发布于 2016/02/27 21:44
字数 163
阅读 32
收藏 0
点赞 1
评论 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
博文 154
码字总数 98469
作品 0
浦东
程序员
iOS OC NSCopying 协议

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

卧龙小 ⋅ 2015/07/11 ⋅ 0

OC中copy的使用

首先,什么是copy? Copy的字面意思是“复制”、“拷贝”,是一个产生副本的过程。 常见的复制有:文件复制,作用是利用一个源文件产生一个副本文件。 特点:1、修改源文件的内容,不会影响副...

傲风凌寒 ⋅ 2014/05/19 ⋅ 1

OC学习篇之---对象的拷贝

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

jiangwei0910410003 ⋅ 2014/12/14 ⋅ 0

Object-C基础-08-protocol

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

Corwien ⋅ 2016/03/20 ⋅ 0

编写高质量iOS与OS X代码的52个有效方法(上篇)

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

凝望向北 ⋅ 2017/04/06 ⋅ 0

《Using Swift with Cocoa and Objective-C》总结

互用性 1>与Objective-C API交互 1.初始化 1)在OC中,初始化往往会有init、initWith字眼,但在swif却在这里都省略了,连分配内存的alloc,swift也会自动帮我们处理。 //Objective-CUITableVi...

Ethan-GOGO ⋅ 2015/10/29 ⋅ 0

04 - Object-C协议与代理设计

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

口十耳 ⋅ 2015/12/29 ⋅ 0

iOS - OC NSCache 缓存

前言 NSCache 是苹果提供的一个专门用来做缓存的类,当内存 "不足" 或超过限制的时候,会自动清理缓存,使用时可以指定缓存的数量和成本。用法与 NSMutableDictionary 的用法很相似,在 AFNe...

仟0123 ⋅ 2016/08/18 ⋅ 0

教程1:Objective-C

Objective-C的教程已经看过了。 内容大概有:[Objective-C基础语法(if/else/switch/for...),关键字,运算符],[面向对象(封装/继承/多态)],[Foundation框架常用类],[内存管理],[协...

殷美洪 ⋅ 2013/03/11 ⋅ 0

拷贝

一、拷贝: 任何实现拷贝功能都需要实现NSCopying协议。 1、深拷贝: 开辟一个新空间,对对象本身进行拷贝以外,还会对对象里包含的子元素逐个进行拷贝,指向的内存新的内存空间。 2、浅拷贝...

Cy_Star ⋅ 2017/10/18 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

MyBatis四大核心概念

本文讲解 MyBatis 四大核心概念(SqlSessionFactoryBuilder、SqlSessionFactory、SqlSession、Mapper)。 MyBatis 作为互联网数据库映射工具界的“上古神器”,训有四大“神兽”,谓之:Sql...

waylau ⋅ 20分钟前 ⋅ 0

以太坊java开发包web3j简介

web3j(org.web3j)是Java版本的以太坊JSON RPC接口协议封装实现,如果需要将你的Java应用或安卓应用接入以太坊,或者希望用java开发一个钱包应用,那么用web3j就对了。 web3j的功能相当完整...

汇智网教程 ⋅ 34分钟前 ⋅ 0

2个线程交替打印100以内的数字

重点提示: 线程的本质上只是一个壳子,真正的逻辑其实在“竞态条件”中。 举个例子,比如本题中的打印,那么在竞态条件中,我只需要一个方法即可; 假如我的需求是2个线程,一个+1,一个-1,...

Germmy ⋅ 46分钟前 ⋅ 0

Springboot2 之 Spring Data Redis 实现消息队列——发布/订阅模式

一般来说,消息队列有两种场景,一种是发布者订阅者模式,一种是生产者消费者模式,这里利用redis消息“发布/订阅”来简单实现订阅者模式。 实现之前先过过 redis 发布订阅的一些基础概念和操...

Simonton ⋅ 今天 ⋅ 0

error:Could not find gradle

一.更新Android Studio后打开Project,报如下错误: Error: Could not find com.android.tools.build:gradle:2.2.1. Searched in the following locations: file:/D:/software/android/andro......

Yao--靠自己 ⋅ 昨天 ⋅ 0

Spring boot 项目打包及引入本地jar包

Spring Boot 项目打包以及引入本地Jar包 [TOC] 上篇文章提到 Maven 项目添加本地jar包的三种方式 ,本篇文章记录下在实际项目中的应用。 spring boot 打包方式 我们知道,传统应用可以将程序...

Os_yxguang ⋅ 昨天 ⋅ 0

常见数据结构(二)-树(二叉树,红黑树,B树)

本文介绍数据结构中几种常见的树:二分查找树,2-3树,红黑树,B树 写在前面 本文所有图片均截图自coursera上普林斯顿的课程《Algorithms, Part I》中的Slides 相关命题的证明可参考《算法(第...

浮躁的码农 ⋅ 昨天 ⋅ 0

android -------- 混淆打包报错 (warning - InnerClass ...)

最近做Android混淆打包遇到一些问题,Android Sdutio 3.1 版本打包的 错误如下: Android studio warning - InnerClass annotations are missing corresponding EnclosingMember annotation......

切切歆语 ⋅ 昨天 ⋅ 0

eclipse酷炫大法之设置主题、皮肤

eclipse酷炫大法 目前两款不错的eclipse 1.系统设置 Window->Preferences->General->Appearance 2.Eclipse Marketplace下载【推荐】 Help->Eclipse Marketplace->搜索‘theme’进行安装 比如......

anlve ⋅ 昨天 ⋅ 0

vim编辑模式、vim命令模式、vim实践

vim编辑模式 编辑模式用来输入或修改文本内容,编辑模式除了Esc外其他键几乎都是输入 如何进入编辑模式 一般模式输入以下按键,均可进入编辑模式,左下角提示 insert(中文为插入) 字样 i ...

蛋黄Yolks ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部