猿问

allocWithZone和NSAllocateObject的区别是什么?

《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=
沧海一幻觉
浏览 336回答 2
2回答

米琪卡哇伊

这是NSObjectClass源码+(id)allocWithZone:(NSZone*)z{returnNSAllocateObject(self,0,z);}参考这个链接,因为你的singleton可能rootclass不是nsobject,所以直接使用NSAllocateObject.NSProxy就是rootclass,但是它是cocoa下的。iOS下的rootclass就是NSObject就是rootclass,参考。

慕妹3242003

因为一些单例的实现会覆盖+allocWithZone:方法,直接返回该单例,苹果文档中给出的实现就是这样。所以你要用NSAllocatObject来创建对象
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答