为什么Xcode跳过循环代码?

时间:2014-04-22 10:48:19

标签: ios methods

只想询问此方法initWithNibName是否结束,logInIDArraypasswordArray属性是否会再次变为零?

- (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;
}

3 个答案:

答案 0 :(得分:1)

因为你实例化它们所以它们不能成为零。虽然他们将是空的。

答案 1 :(得分:1)

这取决于:

  • 如果您使用强引用来保持单例实例BNRLogInDataBase将保留,如果不会将其解除分配

  • ,则如何实施logInDatabase单例
  • 您如何声明logInIDArraypasswordArray属性,如果强大,只要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方法。