2017-03-09 52 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; 
} 
相關問題