我正在开发 IOS 静态库。
我需要创建只能在这个库中访问的全局变量。
我知道 3 种方法来做到这一点
问题是,哪种方式更好。
第一个解决方案:SharedInstance
.h:
@interface GlobalVars : NSObject
@property int counter;
+(instancetype)sharedInstance;
@end
.m:
@implementation GlobalVars
+(instancetype)sharedInstance {
static dispatch_once_t p = 0;
__strong static id _sharedObject = nil;
dispatch_once(&p, ^{
_sharedObject = [[self alloc] init];
});
return _sharedObject;
}
+(int)counter{
return [GlobalVars sharedInstance].counter;
}
+(void)setCounterint)_counter{
[GlobalVars sharedInstance].counter=_counter;
}
@end
在代码中使用:
[GlobalVars setCounter:5];
int i= GlobalVars.counter
第二种方案:静态变量+类方法
h:
@interface GlobalVars
+ (int) counter;
+ (void) setCounterint)val;
@end
米:
@implementation GlobalVars
static int value;
+ (int) counter {
return value;
}
+ (void) setCounterint)val {
value = val;
}
@end
在代码中使用:
[GlobalVars setCounter:5];
int i= GlobalVars.counter
第三种解决方案:外部变量
常量.h:
extern int *kCounter ;
在代码中使用:
#import "Constants.h"
-(void)someMethod{
kCounter=5;
int i=kCounter;
}
谢谢
编辑:
解决方案必须是“线程安全的”
Best Answer-推荐答案 strong>
对于大多数类型,您可以使用 NSUserDefaults 。在 AppDelegate 中,您可以注册默认值,然后在任何范围内修改它们。
保存
NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
// saving an NSString
[prefs setObject"TextToSave" forKey"keyToLookupString"];
// saving an NSInteger
[prefs setInteger:42 forKey"integerKey"];
// saving a Double
[prefs setDouble:3.1415 forKey"doubleKey"];
// saving a Float
[prefs setFloat:1.2345678 forKey"floatKey"];
// This is suggested to synch prefs, but is not needed (I didn't put it in my tut)
[prefs synchronize];
检索
NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
// getting an NSString
NSString *myString = [prefs stringForKey"keyToLookupString"];
// getting an NSInteger
NSInteger myInt = [prefs integerForKey"integerKey"];
// getting an Float
float myFloat = [prefs floatForKey"floatKey"];
关于ios - 创建全局变量的最佳实践,我们在Stack Overflow上找到一个类似的问题:
https://stackoverflow.com/questions/27960101/
|