Ios 如果在+;sharedInstance方法。。?
如果在+sharedInstance方法之前调用singleton类的init方法,会发生什么。。?这会产生一个新的对象吗?如果不是,那么如何返回相同的实例?静态变量在sharedInstance中声明的事实将对总体结果产生任何影响Ios 如果在+;sharedInstance方法。。?,ios,objective-c,iphone,singleton,Ios,Objective C,Iphone,Singleton,如果在+sharedInstance方法之前调用singleton类的init方法,会发生什么。。?这会产生一个新的对象吗?如果不是,那么如何返回相同的实例?静态变量在sharedInstance中声明的事实将对总体结果产生任何影响 + (LibraryAPI*)sharedInstance { // 1 static LibraryAPI *_sharedInstance = nil; // 2 static dispatch_once_t oncePredi
+ (LibraryAPI*)sharedInstance
{
// 1
static LibraryAPI *_sharedInstance = nil;
// 2
static dispatch_once_t oncePredicate;
// 3
dispatch_once(&oncePredicate, ^{
_sharedInstance = [[LibraryAPI alloc] init];
});
return _sharedInstance;
}
这取决于init方法的实现方式。默认情况下,可以使用init创建新对象。为了防止创建此类的实例,可以在init方法中返回nil,并为类创建私有初始值设定项
-(instancetype)init {
return nil;
}
-(instancetype)localInit {
if(!self) {
self = [super init];
}
return self;
}
那么这条线呢
_sharedInstance = [[LibraryAPI alloc] init];
将改为
_sharedInstance = [[LibraryAPI alloc] localInit];
在Objective-C中,类的init方法只是带有“init”前缀的方法。这是objc和swift最大的区别之一。所以,如果调用init方法,这是错误的,但当init方法成功返回时,无疑会初始化一个新实例
函数中的静态变量在调用之间保持其值。因此,每次调用方法
sharedInstance
时,它都会给出相同的实例。关于静态变量的更多信息请检查看看这个,这样我就不清楚你的问题了。如果我调用[[LibraryAPI alloc]init]5次,它将创建并返回5个对象。但是如果我调用[LibraryAPI sharedInstance],它将始终返回singleton对象。在这种情况下,“\u sharedInstance=[[LibraryAPI alloc]init];”行不也会收到nil作为返回吗?你说得对!我将删除代码示例。基本上,您可以编写另一个init方法,该方法无法从类外部访问-->I update my answer。