OStack程序员社区-中国程序员成长平台

标题: ios - 创建全局变量的最佳实践 [打印本页]

作者: 菜鸟教程小白    时间: 2022-12-13 04:51
标题: ios - 创建全局变量的最佳实践

我正在开发 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-推荐答案


对于大多数类型,您可以使用 NSUserDefaults。在 AppDelegate 中,您可以注册默认值,然后在任何范围内修改它们。

Example

保存

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/






欢迎光临 OStack程序员社区-中国程序员成长平台 (https://ostack.cn/) Powered by Discuz! X3.4