继之前转载的iOS单例模式,经查看文档及书籍,了解有关单例子类化的问题。 对于前面的iOS单例模式,一般使用基本已能满足。但有时要将单例子类化时,我们将会遇到问题。 下面上代码://之前的简要代码 + (id)sharedManager { static MyManager *sharedMyManager = nil; static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ sharedMyManager = [[self alloc] init]; }); return sharedMyManager; }
//改进后代码
+ (id)sharedManager { static MyManager *sharedMyManager = nil; static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ //这样初始化的singletone 当子类化时,永远返回的是Singletone。 因为Singleton重载了所有实例话相关的方法,所以对其子类化相当需要技巧。 //下面是改进方法 // sharedMyManager = [[super allocWithZone:NULL] init]; //使用此方法[NSAllocateObject(Class aClass, NSUInteger extraBytes, NSZone * zone),根据类的类型实例化任何对象。 sharedMyManager = [NSAllocateObject([self class], 0, NULL) init]; }); return sharedMyManager; }
iOS单例子类化问题
最新推荐文章于 2018-06-06 09:54:39 发布