2014-07-04 71 views
0

我對Objective C非常陌生,並且偶然發現了這個問題。 如何在Objective C中創建一個可從多個類和主函數訪問的類的全局實例?如何在Objective-C中創建類的全局實例C

+1

可能重複(http://stackoverflow.com/questions/8808159/objective-c-global-variables) – edtheprogrammerguy

+0

重複的http://計算器。 COM /問題/ 8808159/OBJ ective-c-global-variables – edtheprogrammerguy

+0

@dasblinkenlight表明其中一個不是線程安全的。目前推薦的方法是使用'dispatch_once',否則你可以使用'@ synchronized'。見http://www.galloway.me.uk/tutorials/singleton-classes/ – jcaron

回答

1

向你的類添加一個返回這個特定實例的方法。

最常見的情況是單身人士。你也可以查看「共享實例」。

1

你能做到這樣:

+(MyClass *) sharedInstance 
{ 
    static id sharedInstance = nil; 
    @synchronized(self) 
    { 
     if (!sharedInstance) 
     { 
      sharedInstance = [[MyClass alloc] init]; 
     } 
     return sharedInstance; 
    } 
} 

通過這一行代碼就訪問對象:

[MyClass sharedInstance] 

希望它可以幫助!快樂編碼:)

-1

您可以使用單,導入.h文件在你的.PCH文件,通過這樣做,每個文件都會有這樣的輸入:

YourClass.h:

@interface YourClass : NSObject 

/** 
* Method to get the singleton instance 
* @return Instance of YourClass 
*/ 
+ (YourClass *)instance; 
@end 

YourClass的.m:目標c - 全局變量]的

#import "YourClass.h" 

@interface YourClass(){ 

} 
@end 

#pragma mark - 

@implementation YourClass 

- (id)init{ 
    //prevents normal inits 
    return nil; 
} 

+ (YourClass *)instance 
{ 
    static YourClass *instance = nil; 
    static dispatch_once_t onceToken; 
    dispatch_once(&onceToken, ^{ 
     instance = [[self alloc] initSingelton]; 
    }); 
    return instance; 
} 

- (id)initSingelton{ 
    if (self = [super init]) { 
     //do stuff here 
     return self; 
    } 
    return nil; 
} 
+0

爲什麼選擇投票? –