我的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){
但它不起作用......如何检查是否已初始化?
答案 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