美文网首页
iOS 中对copy的探索

iOS 中对copy的探索

作者: CoderHG | 来源:发表于2018-01-03 17:28 被阅读389次

看到标题就很low,copy方法有什么好探索的,接下来我们一步一步的看个究竟吧。

0、说在前面的话

先来看一下下面的代码:


image.png

主要是关于NSArraycopymutableCopy的使用, 看上去没有什么问题。是的,就是这么简单。那么这篇文章即将要介绍的是什么呢?

其实上面的例子很简单是因为系统已经已经处理了两个协议:NSCopying 与 NSMutableCopying,这两个协议到底有什么作用呢?请看下一个小标题。

PS: 在上图中, hgArray与hgcCopyArray的地址是一样的0x6040000326a0, 这是另一个小知识了, 所谓的深拷贝与浅拷贝,网上资料一大堆,不再重复。

1、自定义类的copy与mutableCopy

创建一个继承于NSObject的子类HGObject。然后弄一个以下操作:

image.png

很明显Crash了, 提示没有找到copyWithZone:方法。是的,这是一个协议方法,必须要遵循NSCopying协议才行。应该是这样的:

image.png

这样就没有问题了,从上面代码中也能看到copyWithZone:方法的作用就是重新开辟内存空间。那么问题又来了,在子类中还需要重写copy方法么?

image.png

一般情况是不需要了, 因为调用copy方法之后, 就直接去调用NSCopying协议中的方法了。意思就是[super copy]这句代码一定会调用这个方法copyWithZone:

同理, NSMutableCopying 与 NSCopying是一样的!

小总结:
  • 1. 在继承于NSObject(或者子类)的子类中, 想要实现copy的功能,务必要重写copyWithZone:方法。
  • 2. 一般情况下, 没有必要重写copy方法,因为执行[super copy]之后一定会执行copyWithZone:方法。

2、用处

在实际开发中, 很少在自定义的子类中去调用copy与mutableCopy方法。其中有一个地方会用到,为了单例设计的严谨性, 需要考虑到这两个方法的重写。

相关文章

  • iOS 中对copy的探索

    看到标题就很low,copy方法有什么好探索的,接下来我们一步一步的看个究竟吧。 0、说在前面的话 先来看一下下面...

  • iOS 中 copy 的原理

    iOS 中 copy 的原理iOS 中 copy 的原理

  • iOS开发之copy

    iOS中copy有两种copy和mutableCopy

  • string属性用copy和strong修饰符时的不同

    strong和copy修饰NSString属性时的不同 iOS中对字符串的修饰可以用strong也可以用copy,...

  • iOS【copy,strong,retain,weak和assi

    摘录:iOS中copy,strong,retain,weak和assign的区别 copy,strong,weak...

  • iOS开发-iOS中的拷贝

    今天来说一下iOS中的copy。 在iOS中,拷贝有两种方式,深拷贝(Deep copy)和浅拷贝(Shallow...

  • iOS干货收集

    programming iOS - layer iOS中copy,strong,retain,weak和assig...

  • iOS中的Copy

    copy的概念特点 copy产生一个新副本的过程,利用一个原对象产生一个新对象copy:创建一个不可变的副本(NS...

  • ios中的copy

    为什么要专门写一篇文章来讲这copy?以前在开发的时候只知道什么时候用,但是在面试的时候,会经常被问到,一研究,发...

  • iOS 中的copy

    iOS 关于拷贝: 如何让自定义的类实现拷贝功能?实现 协议 -(id) copyWith...

网友评论

      本文标题:iOS 中对copy的探索

      本文链接:https://www.haomeiwen.com/subject/waihnxtx.html