【发布时间】:2014-04-22 10:48:18
【问题描述】:
只想问initWithNibName这个方法结束了,logInIDArray和passwordArray属性会不会又变成nil了?
- (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;
}
【问题讨论】:
-
这取决于
sharedLogInDataBase- 它真的返回一个单例实例吗?并显示您遇到问题的代码,并描述已完成的调试。 -
logInDatabase对象指向单例对象,因此它将被保留!!! -
伙计,我知道问这个问题很愚蠢,因为每当我将对象添加到属性中时,每次添加时我仍然会得到 0 个对象或 1 个对象。
-
@Wain 这是代码 +(instancetype)sharedLogInDataBase { static BNRLogInDataBase * database = nil; if (!nil) { 数据库 = [[BNRLogInDataBase alloc]initPrivate]; } 返回数据库; }
-
您应该考虑一下 BNRLogInDataBase 类的设计。在另一个类中实例化属性确实是一种不好的做法。