IOS 基于 AppDelegate 的全局變量使用方法
- 前言
- 全局變量
- 結語
前言
剛開始做多控制器的項目時就有一個巨大的問題,那就是控制器之間如何進行“通信”,一個比較自然的想法就是用到控制器之間可以共享的全局變量。
但是這個時候就發現。。。怎麼定義全局變量來着?
Objective-C 在 OOP 上其實更像 Java,我們定義 Controller 類的各種行為和操作,然後在 AppDelegate 中将定義的 Controller 執行個體化,加入到 window 或其它的 Controller 對象中。
我們習慣将用到的每個 Controller 單獨定義在一個 .h 檔案中,同時在同名的 .m 檔案中進行實作(比如下圖中的代碼架構):
這樣一來各個控制器的 .m 檔案中是無法直接使用别的控制器定義的變量的。
全局變量
其實建立項目時自動生成的 AppDelegate 相當于是一個全局的代理人,在其中定義外部變量即可在項目中的任何控制器中擷取。進而建立全局變量。
具體過程:
- 在 AppDelegate.h 中定義外部變量:
#import <UIKit/UIKit.h>
@interface AppDelegate : UIResponder <UIApplicationDelegate>
@property (strong, nonatomic) UIWindow *window;
@property (strong, nonatomic) NSMutableArray *dataGroup;
@property (nonatomic, assign) BOOL isLogin;
@end
可以看到 AppDelegate 自動生成的 window 變量,下面的都是我自己配置的全局變量。
- 在其他 Controller 中使用 AppDelegate.h 中定義的外部變量,以 ClockViewController(見圖1) 為例:
#import <Foundation/Foundation.h>
#import "clockViewController.h"
#import "../AppDelegate.h"
首先在 ClockViewController 使用相對路徑引入 AppDelegate.h。
然後建立一個 AppDelegate。
就可以使用 myDelegate.XXX 的形式盡情使用 AppDelegate 中聲明的變量了。
結語
因為剛開始學習 UI 代碼架構,是以一些很基礎的東西确實完全不知道怎麼弄,在網上查了很久的資料才得以解決問題,是以在此處記錄,希望可以幫助大家更快解決問題。
如有差錯,敬請指正。