为了账号安全,请及时绑定邮箱和手机立即绑定

allocWithZone和NSAllocateObject的区别是什么?

allocWithZone和NSAllocateObject的区别是什么?

沧海一幻觉 2019-04-23 15:36:03
《Objective-C编程之道》“第7章单例”中提到用NSAllocateObject来分配可以防止子类分配时候得到父类的对象。但是据我测试没有任何区别,请知情人士指点。创建对象代码+(Singleton*)sharedInstance{if(uniqueInstance==nil){uniqueInstance=[[superallocWithZone:nil]init];//uniqueInstance=NSAllocateObject([selfclass],0,nil);}returnuniqueInstance;}测试代码idchild1=[[Childalloc]init];NSLog(@"child1=%@",child1);idchild2=[[Childalloc]init];NSLog(@"child2=%@",child2);测试结果2013-03-2216:59:34.634Singleton[5107:303]ThisisSingletondemo.2013-03-2216:59:34.636Singleton[5107:303]child1=2013-03-2216:59:34.637Singleton[5107:303]child2=
查看完整描述

2 回答

?
米琪卡哇伊

TA贡献1998条经验 获得超6个赞

这是NSObjectClass源码+(id)allocWithZone:(NSZone*)z
{
returnNSAllocateObject(self,0,z);
}参考这个链接,因为你的singleton可能rootclass不是nsobject,所以直接使用NSAllocateObject.NSProxy就是rootclass,但是它是cocoa下的。iOS下的rootclass就是NSObject就是rootclass,参考。
                            
查看完整回答
反对 回复 2019-04-23
?
慕妹3242003

TA贡献1824条经验 获得超6个赞

因为一些单例的实现会覆盖+allocWithZone:方法,直接返回该单例,苹果文档中给出的实现就是这样。所以你要用NSAllocatObject来创建对象
                            
查看完整回答
反对 回复 2019-04-23
  • 2 回答
  • 0 关注
  • 335 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信