天天看點

IOS-全局變量前言全局變量結語

IOS 基于 AppDelegate 的全局變量使用方法

  • 前言
  • 全局變量
  • 結語

前言

剛開始做多控制器的項目時就有一個巨大的問題,那就是控制器之間如何進行“通信”,一個比較自然的想法就是用到控制器之間可以共享的全局變量。

但是這個時候就發現。。。怎麼定義全局變量來着?

Objective-C 在 OOP 上其實更像 Java,我們定義 Controller 類的各種行為和操作,然後在 AppDelegate 中将定義的 Controller 執行個體化,加入到 window 或其它的 Controller 對象中。

我們習慣将用到的每個 Controller 單獨定義在一個 .h 檔案中,同時在同名的 .m 檔案中進行實作(比如下圖中的代碼架構):

IOS-全局變量前言全局變量結語

這樣一來各個控制器的 .m 檔案中是無法直接使用别的控制器定義的變量的。

全局變量

其實建立項目時自動生成的 AppDelegate 相當于是一個全局的代理人,在其中定義外部變量即可在項目中的任何控制器中擷取。進而建立全局變量。

具體過程:

  1. 在 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 變量,下面的都是我自己配置的全局變量。

  1. 在其他 Controller 中使用 AppDelegate.h 中定義的外部變量,以 ClockViewController(見圖1) 為例:
#import <Foundation/Foundation.h>
#import "clockViewController.h"
#import "../AppDelegate.h"
           

首先在 ClockViewController 使用相對路徑引入 AppDelegate.h。

然後建立一個 AppDelegate。

就可以使用 myDelegate.XXX 的形式盡情使用 AppDelegate 中聲明的變量了。

結語

因為剛開始學習 UI 代碼架構,是以一些很基礎的東西确實完全不知道怎麼弄,在網上查了很久的資料才得以解決問題,是以在此處記錄,希望可以幫助大家更快解決問題。

如有差錯,敬請指正。