alloc和allocWithZone
来源:互联网 发布:襄阳华为云计算招聘 编辑:程序博客网 时间:2024/05/16 08:25
之前做项目的时候见过这样一个方法创建单例:
static MyGizmoClass *sharedGizmoManager = nil;- + (MyGizmoClass*)sharedManager
- {
- if (sharedGizmoManager == nil) {
- sharedGizmoManager = [[super allocWithZone:NULL] init];
- }
- return sharedGizmoManager;
- }
- + (id)allocWithZone:(NSZone *)zone
- {
- return [[self sharedManager] retain];
- }
alloc和allocWithZone有什么区别?
memroy zone已经弃用,但为什么还保留这接口,是个历史遗留问题。有实践证明,alloc执行的时候默认调用allocWithZone方法,
这个创建单例的例子是想,当对象存在时,禁止再用alloc,保证单例,这就很好理解他为什么要覆盖allocWithZone函数了。覆盖了allocWithZone方法就堵死了所有创建新对象的方法。
NSZone的真面目是Apple分配和释放内存的方式,使用C结构存储关于对象存储管理的信息,而不是对象。我的理解就是,NSZone就是一块划出来的、连续的内存空间,每次创建对象时,都从这块空间上划分,释放NSZone时,NSZone上的对象会全部被释放。不会造成碎片。
ApplIication框架有一个默认的NSZone,一般情况下我们是用不到自己创建NSZone的,但是当我们创建一个大内存的对象时,就可能会用到NSZone。
这是因为,Apple想填充碎片,创建对象时优先扫描内存间隙,也就是碎片,这会造成很大的时间开销,这时你可以自己创建一个NSZone,创建大内存的对象时直接存到指定的空间,也就是自己创建的NSZone里面去,这样就可以节省很多时间,而且,多个对象在同一时间alloc可以减少分页使用,而且在同一个时间dealloc可以减少内存碎片。
0 0
- alloc和allocWithZone
- Alloc 和 AllocWithZone的区别
- Alloc 和 AllocWithZone 区别和联系
- alloc 和allocwithzone的区别 参考
- Objective-C 里的 Alloc 和 AllocWithZone
- Objective-C中Alloc和AllocWithZone
- new alloc allocWithZone
- 从 Objective-C 里的 Alloc 和 AllocWithZone 谈起
- 从 Objective-C 里的 Alloc 和 AllocWithZone 谈起
- 从 Objective-C 里的 Alloc 和 AllocWithZone 谈起
- 从 Objective-C 里的 Alloc 和 AllocWithZone 谈起
- 从 Objective-C 里的 Alloc 和 AllocWithZone 谈起
- 从 Objective-C 里的 Alloc 和 AllocWithZone 谈起
- Objective-C 里的 Alloc 和 AllocWithZone的区别
- Objective-C 里的 Alloc 和 AllocWithZone的区别
- alloc与allocWithZone的用法区别
- allocwithzone
- allocwithzone
- [LeetCode]376. Wiggle Subsequence
- 动画
- YOLO下一步:输出预测boundingbox做进一步处理
- C++成员变量初始化顺序
- 基于1.1.2版本kubelet源码阅读(2)
- alloc和allocWithZone
- Apache 配置虚拟主机之3--基于IP+Port结合
- 关于在spring 容器初始化 bean 和销毁前所做的操作定义方式有三种
- 【Leetcode】482. License Key Formatting
- supervivi其实挺好用的啊啊啊啊
- PLS-00905: 对象 SCOTT.QUERYEMPINFO 无效;PL/SQL: Statement ignored
- 线段树(lazy算法+离散化)
- lightOJ 1028 Trailing Zeroes (I)
- xcode问题及解决