ios - 不懂全局变量

标签 ios objective-c ipad global-variables global

我正在为 iPad 开发一个经常需要共享变量的应用程序。对我来说,最简单的解决方案似乎是创建一个具有全局变量的类,而不是专注于来回传递 - 因为我也遇到了一些问题。

使用带有 Storyboard的 Xcode 5 在 iPad IOS7 的 Objective-C 中创建和使用全局变量的最简单方法是什么?

(我知道有重复但我做不到)

最佳答案

编辑:根据@nhgrif 和其他人的评论,我稍微更改了我的答案

传递变量或使用全局变量的方式实际上取决于您尝试做什么。

这里有几种方法:

将一个值从一个 View 传递到另一个 View 可以简单地在将它添加到堆栈之前完成:

ViewController *viewController = [[ViewController alloc] init];
viewController.yourIntegerValue =  42;   
[self presentViewController:viewController animated:YES completion:nil];

NSUserDefaults 非常适合您喜欢传递或保存供以后使用的通用小块数据。请参阅 AlwaysWannaLearn 的示例,我通常为所有通用值(带键)构建和存储 NSDictionary。 (另请参阅我同意的@nhgrif 的评论)

AppDelegate 解决方案是@Martin Koles 建议的另一种方式。对于一组值也许没问题,如果只是为了将我所有的全局变量放在一个地方,我会避免使用它。

Singleton 解决方案(原始答案)。 它简单、可扩展、优雅且高效。我通常将其中之一添加到我创建的任何项目中。

这里是如何快速做到这一点:

创建一个新文件:MyManager.h

#import <foundation/Foundation.h>

@interface MyManager : NSObject {
    NSString *someProperty;
}

@property (nonatomic, retain) NSString *someProperty;

+ (id)sharedManager;

@end

创建一个新文件:MyManager.m

#import "MyManager.h"

@implementation MyManager

@synthesize someProperty;

#pragma mark Singleton Methods

+ (id)sharedManager {
    static MyManager *sharedMyManager = nil;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        sharedMyManager = [[self alloc] init];
    });
    return sharedMyManager;
}

- (id)init {
  if (self = [super init]) {
      someProperty = [[NSString alloc] initWithString:@"Default Property Value"];
  }
  return self;
}

- (void)dealloc {
  // Should never be called, but just here for clarity really.
}

@end

真的是这样 - 这个类将保存你的全局函数和值

要使用这个巧妙的技巧,请将以下行粘贴到您项目的任何其他位置

MyManager *sharedManager = [MyManager sharedManager];
//int getValuefromSingleton = sharedManager.MyFunctionOrValue;

关于ios - 不懂全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23910052/

相关文章:

cocoa-touch - 如何在 Split View iPad 应用程序中操作母版?

objective-c - XC测试 : Value not retrieved in NSUserdefaults in UI test Class

ios - 如何为 CALayer 使用基于 block 的动画?

ios - Swift - 如何获得视频维度?

iphone - 添加testflight sdk后无法构建项目

objective-c - 使用 Xcode 将数字存储在变量中后,如何使用 NSUserDefaults 存储日期

iphone - 在 ios 中制作圆形的 MKMapView?

iphone - 从我在 iPhone 上的应用程序调用官方 *Settings* 应用程序

iphone - iPad 上 MPMoviePlayerController 支持的视频格式有哪些?

ios - XMLDictionary 不解析完整的 XML 数据