如何检查JSONModel类是否在Objective-c中初始化?

时间:2017-03-09 21:21:48

标签: ios objective-c null singleton jsonmodel

我的objective-c应用程序中有一个JSONModel类。我将此类与单例一起使用,然后使用以下代码初始化此类:

MyClass *client = [[MyClass alloc] init];
client = [[MyClass alloc] initWithDictionary:myDictionary error:nil];

·H

@interface MyClass : JSONModel
...
+ (id)sharedInstance;
...
@end

的.m

static MyClass *singletonObject = nil;

+ (id) sharedInstance
{
    if (! singletonObject) {

        singletonObject = [[MyClass alloc] init];
    }
    return singletonObject;
}

- (id)init
{
    if (! singletonObject) {
        singletonObject = [super init];
    }
    return singletonObject;
}

我正在尝试检查我是否初始化了我的课程:

if([MyClass sharedInstance] == nil){

但它不起作用......如何检查是否已初始化?

4 个答案:

答案 0 :(得分:1)

通常初始化一个单例,你使用一个类方法(在这种情况下为sharedInstance),并且在该类方法中,如果它是零,则为init你的类。然后在其他任何地方打电话来访问它。

MyClass *yourMom = [MyClass sharedInstance];

// you can use yourMom from now

只要应用程序未终止,它就会保留在内存中。

答案 1 :(得分:0)

我认为我们需要回到基础。从init方法返回单例并不是一个好主意,这就是你的sharedInstance类方法的用途。一般来说,方法应该始终完全按照他们的说法进行操作,因此不再需要初始化(init)新实例的init方法,而不仅仅是返回单例。静态变量也应该在类方法中声明。这通常是如何使用这些类型的方法,但正如其他人所说,我们真的需要知道你所追求的行为类型和原因。

答案 2 :(得分:0)

如果你想创建一个单身人士,这是一个例子:

·H

@interface MyClass : JSONModel
...
@property(strong, nonatomic) Blah *blah; //NSMutableDictionary if you are trying to store JSON

+ (id)sharedInstance;
...
@end

的.m

+ (id) sharedInstance {
    @synchronized(self) {
        if (! singletonObject) {
            singletonObject = [[MyClass alloc] init];
        }
        return singletonObject;
    }
}

//getter
- (Blah *)blah {
    if (!blah) {
        blah = [[Blah alloc] init];
    } 
    return blah;
}

你想把你的JSON存储到那个单身人士中吗?

MyClass *client = [MyClass sharedInstance];
client.blah = ...//your JSON dictionary or something else. This can be used as a global variable.

我不确定你在这里要做什么,我不知道你为什么想要一个单身,你想要它作为一个全局变量存储你的JSON模型在整个应用程序中使用?

答案 3 :(得分:0)

每次使用init / init时,您只是创建了另一个实例,而不是使用共享实例。如果您想以不同于MyClass *client = [MyClass reinitSharedInstanceWithDictionary: myDictionary]; 的方式初始化共享实例,请尝试以下方式:

@interface MyClass : JSONModel
...
+ (id)sharedInstance;
+ (id)reinitSharedInstanceWithDictionary:(NSDictionary*)dict;
...
@end

·H

static MyClass *singletonObject = nil;

+ (id) sharedInstance
{
    if (! singletonObject) {

        singletonObject = [[MyClass alloc] init];
    }
    return singletonObject;
}

+ (id) reinitSharedInstanceWithDictionary:(NSDictionary*)dict
{
    singletonObject = [[MyClass alloc] initWithDictionary:dict error:nil];
    return singletonObject;
}

- (id)init
{
    if (! singletonObject) {
        singletonObject = [super init];
    }
    return singletonObject;
}

的.m

index