copyWithZone详解

  NSObject实现了-copy、+copy、+copyWithZone方法。代码如下:

+ (id)copy {
return (id)self;
} + (id)copyWithZone:(NSZone *)zone {
return (id)self;
} - (id)copy {
return [(id)self copyWithZone:NULL];
}

  其中,+copy、+copyWithZone的存在是为类对象(class obj)服务,以便让类对象能够被插入到容器中。又因为类对象全局只能存在一份,所以+copy、+copyWithZone方法只是简单返回self

  对于-copy,此方法存在的意义只是为了方便,里面会直接把-copyWithZone的方法返回。但是NSObject并没有实现-copyWithZone,需要子对象去实现NSCopying协议(即实现-copyWithZone方法)。

  最后NSZone这玩艺儿已经被Apple抛弃,所以NSObject的copy方法中只是传入NULL。

  那么,在实际开发中该如何实现-copyWithZone方法?

    1)对于祖先链上无-copyWithZone方法的情况,本类直接用 alloc来实现。

    2)对于祖先链上有-copyWithZone方法的情况,先调用[super copyWithZone],再用返回的指针对本类的独有数据进行copy。

    3)对于immutable对象,仅仅对本对象retain使得引用计数加1即可。

最新文章

  1. .Net 转战 Android 4.4 日常笔记(7)--apk的打包与反编译
  2. VHDL学习之模块调用
  3. c#关于日期的两个知识点
  4. 如何在报表权限中使用session
  5. 将kindeditor在线编辑器制作成smarty插件
  6. Codeforces Round #337 Vika and Segments
  7. 【原创分享】python获取乌云最新提交的漏洞,邮件发送
  8. vSphere Client上传镜像
  9. 将远程数据库中的某表数据复制到本数据库(ORACLE)
  10. JAVASCRIPT中的作用域和原型链,应该算是难点了,要好好多学学,练练
  11. Powershell错误处理,try catch finally
  12. mina学习资料整合
  13. [Docker]初次接触
  14. vim代码粘贴缩进混乱的问题[Linux]
  15. 上传第三方jar包至maven私服,以geotools为例
  16. debugger
  17. 最近Android真的凉凉了?
  18. C#如何使用REST接口读写数据
  19. 最小生成树 prime+heap
  20. Leetcode--136. Single Number(easy)

热门文章

  1. bat中for /f 如何截取任意行
  2. 机器学习算法实现解析——libFM之libFM的训练过程概述
  3. 使用pdfcrack破解PDF密码(Linux)
  4. 在Blender上安装RenderMan插件
  5. [转载] 使用FFmpeg捕获一帧摄像头图像
  6. 如何制作CDLinux启动盘
  7. linux上编写运行 dotnet core api
  8. Windows下Python安装lxml
  9. RecyclerView 初体验
  10. INSTALL_FAILED_SHARED_USER_INCOMPATIBLE的问题