alloc init new的区别
来源:互联网 发布:wemall java版 编辑:程序博客网 时间:2024/06/10 08:50
初始化一个对象:
NSString *string=[NSString alloc];//开辟一个内存空间,并把地址返回给指针
NSLog(@"string=%p",string); // string=0x7fb32ae01880
string=[string init];//初始化
NSLog(@"string=%p",string);//string=0x1055d3390
打印地址不一样:
alloc是开辟一个内存空间,init是初始化,为什么初始化不在原有的内存空间上初始化,而是重新开辟一个内存空间,个人认为是方便构造后初始化不同的方法
NSObject *object=[NSObject alloc];
NSLog(@"object=%p",object);//
object=0x7fb32aea0680object=[object init];
NSLog(@"object=%p",object);//object=0x7fb32aea0680
打印地址一样:
看看init方法;
-(id)init{
if(self=[super init]){
----------
}
}
我们知道NSObject是一切类的基类,当[[NSString alloc]init]执行时, 调用的[super init]就是 NSObject中的init方法,既然NSObject身为基类,他也就无法调用super init, 所以 当NSObject执行 [[NSObject alloc]init]时,也就没有了init重新分配空间这一环节
new:
+ new
{
id newObject = (*_alloc)((Class)self, 0);
Class metaClass = self->isa;
if (class_getVersion(metaClass) > 1)
return [newObject init];
else
return newObject;
}
通过源码中我们发现,[className new]基本等同于[[className alloc] init];
0 0
- alloc init new的区别
- new alloc/init 区别
- new 与 alloc/init的区别
- new 与 alloc/init的区别
- new 与 alloc/init的区别
- iOS new和alloc init的区别
- new和alloc init的区别
- iOS new 和alloc/init 的区别
- ios new和alloc init的区别
- iOS new与alloc/init的区别
- ios中alloc init new的区别
- new与alloc init,[NSArray array] 和 [[NSArray alloc]init] 及 self. 和 _ 的区别
- [[NSObject alloc] init] 与 [NSObject new] 的区别
- iOS开发:new 与alloc/init 的区别
- iOS开发new与alloc/init的区别
- iOS开发 new与alloc/init的区别
- iOS开发new与alloc/init的区别
- OC初始化中new和alloc init的区别
- mysql 给表添加唯一约束、联合唯一约束,指定唯一约束的名字
- 【Swift】Runtime动态性分析
- java反射机制
- 带缓存的字节输入输出流
- 煤矿工人成为互联网工程师的故事
- alloc init new的区别
- leetcode 37. Sudoku Solver
- 今天给大家讲个故事
- 近期学习内容顺序
- 支付宝支付
- Mac系统下,Hadoop 2.6.2 + Mahout 0.12.1 完全分布式配置
- webview自适应高度
- 二叉树及其应用--二叉树特征值与销毁
- junit