编辑:关注@nhgrif 和其他 cmets,我正在稍微改变我的答案
传递变量或使用全局变量的方式实际上取决于您尝试做什么。
这里有几种方法:
将一个值从一个视图传递到另一个视图可以简单地在将其添加到堆栈之前完成,如下所示:
ViewController *viewController = [[ViewController alloc] init];
viewController.yourIntegerValue = 42;
[self presentViewController:viewController animated:YES completion:nil];
NSUserDefaults 非常适合您喜欢传递或保存以备后用的通用小块数据。参见 AlwaysWannaLearn 的示例,我通常为所有通用值(带键)构建和存储 NSDictionary。
(另见我同意的@nhgrif 的评论)
AppDelegate 解决方案是@Martin Koles 建议的另一种方法。也许对于一组值来说没问题,如果只是为了将我所有的全局变量放在一个地方,我会避免它。
单例解决方案(原始答案)。
它简单、可扩展、优雅、高效。我通常将其中一个添加到我创建的任何项目中。
这里是如何快速做到这一点:
创建一个新文件: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;