巧用AppDelegate单例

刚从C转到面向对象编程时,对一种叫做Singleton的设计模式相当鄙视,觉得他上不得台面, 今天让我们在iOS应用程序中简单的创建出一个全局变量, 比C语言中要复杂一些但是还是相当方便的。 


做过iOS开发的人都知道AppDelegate这个类本身就是一个单例,所以我们可以很方便在AppDelegate中创建程序所需要的全局变量。下面我和大家分享如何一步步实现在AppDelegate中创建全局变量。


1.      首先我们在AppDelegate.h中定义全局变量:

#import 
@interface AppDelegate : UIResponder 
{
    int a;
    NSString *globalString;
}
@property (nonatomic) int a;
@property(strong, nonatomic) NSString *globalString;
@property (strong, nonatomic) UIWindow *window;

@end

2.     在我们的AppDelegate.m文件中初始化我们的全局变量

-(BOOL)application:(UIApplication*)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    
    self.a = 5;
self.globalString = @"中国小灵通";
}

3.    创建一个basicViewController类,并让他做为当前window的rootViewController

self.window.rootViewController = [[BasicViewController alloc] initWithNibName:nil bundle:nil];

4.  再创建一个名为FirstView的类,在实现文件中修改全局变量的值

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        
        AppDelegate *appDelegate = (AppDelegate *) [[UIApplication sharedApplication] delegate];
        appDelegate.a = 10010;
        appDelegate.globalString = @"中国想联通";
        NSLog(@"%@ 的客服电话是: %d", appDelegate.globalString, appDelegate.a);
    }
    return self;
}

5.   在BasicViewController的实现文件中,我们写下如下代码:

- (void)viewDidLoad
{
    [super viewDidLoad];
    
    AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
    //初始化的全局变量的值
    NSLog(@"%@ 的客服电话初始值为: %d", appDelegate.globalString, appDelegate.a);
    
    appDelegate.a = 10086;
    appDelegate.globalString = @"中国移不动";
	
    NSLog(@"%@ 的客服电话是:%d",appDelegate.globalString,appDelegate.a);
    
    
    FirstView *myView = [[FirstView alloc] initWithFrame:CGRectMake(334, 50, 100, 100)];
    myView.backgroundColor = [UIColor cyanColor];
    
    [self.view addSubview:myView];
    
    //检查当前的全局变量a和globalString的值
    NSLog(@"当前的a为:%d",appDelegate.a);
    NSLog(@"当前的globalString为:%@", appDelegate.globalString);
}

6. 最后,我们的输出结果为:

2014-03-12 09:36:48.399 AppDelegate_Singleton[613:70b] 中国小灵通 的客服电话初始值为: 5
2014-03-12 09:36:48.401 AppDelegate_Singleton[613:70b] 中国移不动 的客服电话是:10086
2014-03-12 09:36:48.401 AppDelegate_Singleton[613:70b] 中国想联通 的客服电话是: 10010
2014-03-12 09:36:48.402 AppDelegate_Singleton[613:70b] 当前的a为:10010
2014-03-12 09:36:48.402 AppDelegate_Singleton[613:70b] 当前的globalString为:中国想联通


当然如果你想了解更多的AppDelegate相关的知识,建议你去查看官方的文档。你也可以看看这位老兄的说法:

http://stackoverflow.com/questions/6062569/difference-between-appdelegate-m-and-view-controller-m



demo下载地址 :

http://download.csdn.net/detail/luozhonglan/7026935





你可能感兴趣的:(iOS)