zoukankan      html  css  js  c++  java
  • Cocoa开发中, 如何用全局变量

    比如在tabbar的开发中,可以某个页面的数据需要在back到此页面后依然有效。

    可以用 appDelegate 这个对象来创建你的全局数据

    这个内建的对象,在 APP 启动时产生,在 APP 退出时销毁

    下面是实例
    假设我们给这个变量定义的名字为 GlobalValue

    1. 在 IphoneViewAppDelegate.h 中加入下面的代码(加在 interface 外)

      // 记录当次运行实例中 WebView 当前动作
      @property (nonatomic, retain) NSString *GlobalValue;

    2. 在 IphoneViewAppDelegate.m 文件的前面加入下面的代码

      // 记录当次运行实例中 WebView 当前动作
      @synthesize GlobalValue;

    3. 在 IphoneViewController.m 文件的 - (void)viewDidLoad 方法中加入下面的代码

      // 引入全局变量
      IphoneViewAppDelegate appDelegate = (IphoneViewAppDelegate)[[UIApplication sharedApplication] delegate];
      // 对变量写入
      appDelegate.GlobalValue = @"loading";

    在你的文件 *.m 任意一个地方,都可以通过
    IphoneViewAppDelegate *appDelegate = (IphoneViewAppDelegate)[[UIApplication sharedApplication] delegate];//这种写法会报警告,那么应当修改为直接调用

    (IphoneViewAppDelegate *)[[UIApplication sharedApplication] delegate]。。。。
    来获得这个全局的对象
    然后可以对 appDelegate.GlobalValue 进行读写
    在切换界面的过程中,也能读写这个变量,这个值会在退出 APP 时自动销毁

    例子:

    #import <UIKit/UIKit.h>

    @class KidsViewController;

    @interface KidsAppDelegate : UIResponder <UIApplicationDelegate>

    @property (strong, nonatomic) UIWindow *window;

    @property (strong, nonatomic) KidsViewController *viewController;
    @property (strong, nonatomic) IBOutlet UINavigationController *navController;
    @property (strong, nonatomic) NSMutableArray *classList;
    @property (strong, nonatomic) NSMutableArray *childList;
    @property (nonatomic) int currentType;
    @property (nonatomic, strong) NSString *currentSelectName;

    @end

    @implementation KidsAppDelegate
    @synthesize classList = _classList;
    @synthesize childList = _childList;
    @synthesize currentType = _currentType;
    @synthesize currentSelectName = _currentSelectName;

    - (void)dealloc
    {
        [_window release];
        [_currentSelectName release];
        [_viewController release];
        [_classList release];
        [_childList release];
        [super dealloc];
    }

    赋值和调用

    - (void)getChildList:(NSMutableArray *)array
    {
        if (array) {
            
            self.childArray = array;
            ((KidsAppDelegate*)[[UIApplication sharedApplication]delegate]).childList = self.childArray;
            
        }
        
    }

     self.currentType = ((KidsAppDelegate*)[[UIApplication sharedApplication]delegate]).currentType;

    有几种方法

    some developers recommend use singleton patter (ref link http://blog.csdn.net/kmyhy/article/details/7026511)

    方法1:使用静态变量 (不推荐)

    方法2: 使用singleton pattern (ref link: http://nice.iteye.com/blog/855839

    方法3:把全局变量设置到AppDelegate中

    例: 定义和使用一个全局变量"isLogin"

    AppDelegate.h

    @interface AppDelegate :UIResponder <UIApplicationDelegate>

    @property (strong,nonatomic)UIWindow *window;

    @propertyBOOL isLogin;

    @end


    AppDelegate.m

    @implementation AppDelegate

    @synthesize window =_window;

    @synthesize isLogin;

    @end


    那么在其他的class里,则可以通过下列代码调用全局变量

    AppDelegate *delegate=(AppDelegate*)[[UIApplicationsharedApplication]delegate];

    delegate.isLogin=YES;

  • 相关阅读:
    Attach Files to Objects 将文件附加到对象
    Provide Several View Variants for End-Users 为最终用户提供多个视图变体
    Audit Object Changes 审核对象更改
    Toggle the WinForms Ribbon Interface 切换 WinForms 功能区界面
    Change Style of Navigation Items 更改导航项的样式
    Apply Grouping to List View Data 将分组应用于列表视图数据
    Choose the WinForms UI Type 选择 WinForms UI 类型
    Filter List Views 筛选器列表视图
    Make a List View Editable 使列表视图可编辑
    Add a Preview to a List View将预览添加到列表视图
  • 原文地址:https://www.cnblogs.com/lisa090818/p/3433719.html
Copyright © 2011-2022 走看看