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