2017-03-09 65 views
-1

我在我的objective-c应用程序中有一个JSONModel类。我使用这个类有一个单,然后用这个代码初始化这个类:如何检查JSONModel类是否在Objective-c中初始化?

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){ 

但是我t不工作...我怎样才能检查是否被初始化?

+1

当然那并不是中t工作 - 在返回之前''sharedInstance'初始化对象,如果它是'nil'。这感觉就像是[X/Y问题](https://meta.stackoverflow。COM /问题/ 254341/A-车用方形车轮);你想做什么? – NobodyNada

+0

我初始化MyClass与服务器在通话中收到的数据,但然后,我想删除这个和回忆,所以我检查什么时候是空的做电话,当没有,希望是明确的 – user3745888

+2

我真的不知道你是什么在这里做。为什么你甚至需要一个单身人士?另外,你的'init'方法发生了什么?我认为你甚至可能会违反内存管理惯例,最终会导致真正奇怪的错误。 – NobodyNada

回答

0

我想我们需要回到这里的基础知识。从init方法返回单例并不是一个好主意,这就是你的sharedInstance类方法的用处。一般而言,方法应该始终按照他们所说的完成,因此不需要init方法来初始化(init)一个新实例,而不仅仅返回一个单例。此外,静态变量应该在类方法中声明。这通常是如何使用这些类型的方法,但正如其他人所说的,我们确实需要知道你在做什么类型的行为以及为什么。

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模式在整个应用程序中使用?

+0

我想要一个单例,因为我想从另一个类中获取我的JSONModel,并且内容由json初始化,但是如果我的内容发生更改,并且返回到我的第一个类,在此初始化我的类时不重新加载,因为它已经添加了json .. – user3745888

1

通常给init一个单身,你可以使用一个类的方法(在这种情况下sharedInstance),并在类的方法,你init类,如果它是零。然后在其他任何地方打电话来访问它。

MyClass *yourMom = [MyClass sharedInstance]; 

// you can use yourMom from now 

只要app没有终止,它就会一直保留在内存中。

0

每次你使用alloc/init你只是创建另一个实例,而不是使用共享。如果你想给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; 
} 
相关问题