我正在为 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/