我在我的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;
}