• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

ios - 创建全局变量的最佳实践

[复制链接]
菜鸟教程小白 发表于 2022-12-13 04:51:21 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

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

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap