new和alloc init的区别
2015-11-29 00:00
429 查看
摘要: new和alloc init的区别
className* object = [className new]; or className* object = [[className alloc]init]; 背景说明,new是较为老式的写法,后来发现只有一个new不好使,才引入了alloc和init这种写 法,保留new一是向后兼容,二是很多时候是一种更简单的写法。其实是一样的,new在内部调用 的alloc和init. 源代码: + new { id newObject = (*_alloc)((Class)self, 0); //申请空间 Class metaClass = self->isa; if (class_getVersion(metaClass) > 1) return [newObject init];//初始化 else return newObject; } + alloc { return (*_zoneAlloc)((Class)self, 0, malloc_default_zone()); } - init { return self; } [className new]基本等同于[[className alloc] init]. 区别只在于alloc分配内存的时候使用 了zone,这个zone是个什么东东呢?它是给对象分配内存的时候,把关联的对象分配到一个相邻 的内存区域内,以便于调用时消耗很少的代价,升了程序处理速度. 什么要把alloc 和init 分开? 1. 可以使用多种init方法 2. 显示调用总比隐式调用要好 如果确实不需要用其他的init函数,比如initWithString, 只是使用 [Nsobject alloc] init] , 那用new的方法更加方便 * new doesn't support custom initializers (like initWithString) * alloc-init is more explicit than new
相关文章推荐
- 类的继承和派生概念
- 数组与指针,printf参数
- Array Q4 replace space in place
- ubuntu 14.04 更换源
- docker 批量删除 <none> 镜像命令
- 我的新博客就在这里啦http://liuzhengyang.github.io/
- 软文写法
- c语言:输出以下关键字的字节大小及输出一个地址:char,short,int,float,double,long
- hadoop手工编译自己的wordcount
- mysql5.7 新特性增加json的类型
- crt使用root帐号登录linux
- linux中挂载磁盘步骤
- linux中ssh免密码登录
- 从0到1&从1到n
- Jenkins+Maven+SVN快速搭建持续集成环境(转)
- redis时间处理的bug
- OnTriggerEnter与Rigidbody-Unity碰撞检测
- yii2 学习历程——gii配置外部用户访问权限问题
- qt mac 无法读文件
- Web前端:11个让你代码整洁的原则