2014-01-24 73 views
0

我聲明瞭一個Constants.m文件中的一些靜態數組的,例如numberOfRowsInSection算我的tableView:聲明陣列上的文件

+ (NSArray *)configSectionCount 
{ 
    static NSArray *_configSectionCount = nil; 
    @synchronized(_configSectionCount) { 
     if(_configSectionCount == nil) { 
      _configSectionCount = [NSArray arrayWithObjects:[NSNumber numberWithInt:2], [NSNumber numberWithInt:2], [NSNumber numberWithInt:4], [NSNumber numberWithInt:3], [NSNumber numberWithInt:0], nil]; 
     } 
     return _configSectionCount; 
    } 
} 

這是做到這一點的最佳途徑,是否有必要像這樣宣佈他們?

+1

調查'dispatch_once'而不是'@ synchronized'。 – rmaddy

回答

2

我要做的就是:

// main.m 
#import <UIKit/UIKit.h> 
#import "AppDelegate.h" 
#import "Constants.h" 
int main(int argc, char * argv[]) 
{ 
    @autoreleasepool { 
     [Constants class]; 
     return UIApplicationMain(argc, argv, nil, 
        NSStringFromClass([AppDelegate class])); 
    } 
} 

// Constants.h 
extern NSArray* configSectionCount; 
#import <Foundation/Foundation.h> 
@interface Constants : NSObject 
@end 

// Constants.m 
#import "Constants.h" 
@implementation Constants 
NSArray* configSectionCount; 
+(void)initialize { 
    configSectionCount = @[@2, @2, @4, @3, @0]; 
} 
@end 

現在進口Constants.h任何.M文件訪問configSectionCount。爲了使這更容易,我.PCH文件包含此:

// the .pch file 
#import "Constants.h" 

完成。現在configSectionCount絕對是全球性的。 (你真的應該給這樣的全局變量一個特殊格式的名字,比如gCONFIG_SECTION_COUNT,否則你不會明白它來自哪裏。)

+0

非常感謝 - 看起來像一個非常乾淨的方式去做 – fxfuture

+1

沒問題。你明白在_main.m_文件中說'[Constants class]'的目的,對吧?這是爲了使Constants類成立並運行'initialize',在任何其他類(例如AppDelegate)實例化之後,初始化我們的全局變量。如果你不喜歡這種方法,那麼你可以在AppDelegate本身做同樣的事情,如果這足夠早的話。 – matt

+0

是的,我認爲我更喜歡AppDelegate,因爲這對我的需求很好。只需使用您的方法重構我的應用程序,我的代碼就更易於管理。我也不知道這個簡寫'arrayWithObjects'和'numberWithInt'語法 - 所以更新了所有這些,它更漂亮! – fxfuture