《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,参考。
慕妹3242003
TA贡献1824条经验 获得超6个赞
因为一些单例的实现会覆盖+allocWithZone:方法,直接返回该单例,苹果文档中给出的实现就是这样。所以你要用NSAllocatObject来创建对象
添加回答
举报
0/150
提交
取消