如何在Objective-C中初始化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){

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

通常,要启动单身人士,您使用类方法(在本例中为 sharedInstance),在该类方法中,如果是nil,则init您的类。然后打电话给其他任何地方访问它。

MyClass *yourMom = [MyClass sharedInstance];
// you can use yourMom from now

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

我认为我们需要在这里回到基础知识。从初始化方法返回单身人士并不是一个好主意,这就是您的共享班级方法的目的。一般而言,方法应该始终完全按照他们的说法进行操作,而不再有一个初始化的方法来初始化(init)新实例,而不仅仅是返回单例。同样,静态变量应在类方法中真正声明。通常,这是使用这些类型的方法的方式,但是正如其他人所说的那样

如果要创建一个单例,则是一个示例:

.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模型?

每次使用alloc/init时,您只是创建另一个实例而不是使用共享一个实例。如果您想以与init不同的方式启动共享实例,请尝试类似的东西:

MyClass *client = [MyClass reinitSharedInstanceWithDictionary: myDictionary];

.h

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

.m

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

相关内容

  • 没有找到相关文章

最新更新