只想询问此方法initWithNibName
是否结束,logInIDArray
和passwordArray
属性是否会再次变为零?
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
//sharedLogInDataBase returns singleton
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
BNRLogInDataBase *logInDatabase = [BNRLogInDataBase sharedLogInDataBase];
logInDatabase.logInIDArray = [[NSMutableArray alloc]init];
logInDatabase.passwordArray = [[NSMutableArray alloc]init];
}
return self;
}
这是单身人士方法
+(instancetype)sharedLogInDataBase
{
static BNRLogInDataBase * database = nil;
if (!nil) {
database = [[BNRLogInDataBase alloc]initPrivate];
}
return database;
}
-(instancetype)init
{
@throw [NSException exceptionWithName:@"Singleton" reason:@"use sharedLogInDataBase" userInfo:nil];
}
-(instancetype)initPrivate
{
self = [super init];
return self;
}
答案 0 :(得分:1)
因为你实例化它们所以它们不能成为零。虽然他们将是空的。
答案 1 :(得分:1)
这取决于:
如果您使用强引用来保持单例实例BNRLogInDataBase
将保留,如果不会将其解除分配
logInDatabase
单例
您如何声明logInIDArray
和passwordArray
属性,如果强大,只要logInDatabase
存在就会保留,如果弱,它们将变为nil
if (!nil) {
database = [[BNRLogInDataBase alloc]initPrivate];
}
检查您的测试,nil
始终为false
,因此!nil
始终为true
,每次调用您的单身时,您都会获得不同的对象!
答案 2 :(得分:1)
你的方法应该是:
+ (instancetype)sharedLogInDataBase
{
static dispatch_once_t once;
static id sharedInstance;
dispatch_once(&once, ^{
sharedInstance = [[self alloc] init];
});
return sharedInstance;
}
目前您的if (!nil)
没有达到预期的效果......
然后,您的init
方法应该调用initPrivate
方法。