new和alloc
2016-07-17 19:59
363 查看
new和alloc实现的源码如下:
通过源码我们发现,[className new]基本等同于[[className alloc] init],都是分配内存并完成初始化。
但是,区别如下:
new 是把分配内存和初始化的工作一起完成了,先分配内存,然后调用默认的init方法来初始化。
alloc将分配内存和初始化这两个工作分开了,所以它的初始化方法除了默认的init方法之外,还可以使用initXXX方法。同时,init分配内存的时候使用了zone,可以把关联的对象分配到一个相邻的内存区域内,以便于调用时消耗很少的代价,提升了程序处理速度。
new是一种比较老式的用法,现在一般情况下都使用alloc。
//new的源码: + new { id newObject = (*_alloc)((Class)self, 0); Class metaClass = self->isa; if (class_getVersion(metaClass) > 1) return [newObject init]; else return newObject; } //alloc/init的源码 : + alloc { return (*_zoneAlloc)((Class)self, 0, malloc_default_zone()); } - init { return self; }
通过源码我们发现,[className new]基本等同于[[className alloc] init],都是分配内存并完成初始化。
但是,区别如下:
new 是把分配内存和初始化的工作一起完成了,先分配内存,然后调用默认的init方法来初始化。
alloc将分配内存和初始化这两个工作分开了,所以它的初始化方法除了默认的init方法之外,还可以使用initXXX方法。同时,init分配内存的时候使用了zone,可以把关联的对象分配到一个相邻的内存区域内,以便于调用时消耗很少的代价,提升了程序处理速度。
new是一种比较老式的用法,现在一般情况下都使用alloc。
相关文章推荐
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 不可修补的 iOS 漏洞可能导致 iPhone 4s 到 iPhone X 永久越狱
- iOS 12.4 系统遭黑客破解,漏洞危及数百万用户
- 每日安全资讯:NSO,一家专业入侵 iPhone 的神秘公司
- [转][源代码]Comex公布JailbreakMe 3.0源代码
- 讲解iOS开发中基本的定位功能实现
- iOS中定位当前位置坐标及转换为火星坐标的方法
- js判断客户端是iOS还是Android等移动终端的方法
- iOS应用开发中AFNetworking库的常用HTTP操作方法小结
- iOS应用中UISearchDisplayController搜索效果的用法
- iOS App开发中的UISegmentedControl分段组件用法总结
- IOS开发环境windows化攻略
- iOS应用中UITableView左滑自定义选项及批量删除的实现
- iOS中UIAlertView警告框组件的使用教程
- 浅析iOS应用开发中线程间的通信与线程安全问题
- iOS中的UIKeyboard键盘视图使用方法小结
- 检测iOS设备是否越狱的方法
- .net平台推送ios消息的实现方法