繁体   English   中英

在目标C中创建全局变量

[英]Creating global variables in Objective C

我设计了一个登录应用程序。 我已经在sqlite数据库中输入了帐户数据。 但是,当我使用帐户用户名和密码登录时,我希望所有视图控制器都可以访问它们。 因为,我有不同的控制器将更新帐户详细信息。 需要实现细节。。谢谢

使用单例: http : //www.galloway.me.uk/tutorials/singleton-classes/

我有一个类似这样的项目(请注意,我使用的是iOS钥匙串而不是数据库,但我在这里隐藏了这些详细信息):

@interface User : NSObject
@property (nonatomic, strong) NSString *username;

+ (User *)currentUser;

@end

@implementation User

+ (User *)currentUser
{
    static User *currentUser = nil;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        currentUser = [[User alloc] initFromKeychain];
    });
    return currentUser;
}
@end

有很多方法可以做单例(取决于您对某人是否可以创建您的类的非单例实例的偏执程度)。 这里的示例: 我的Objective-C单例应该是什么样?

您也可以在需要的地方直接访问钥匙串。 您还应该问自己,为什么这么多代码需要访问用户名/密码。 听起来像是破损的设计。

避免使用全局变量,而是可以使用Singleton类来存储应用程序范围的凭据信息。

但是请记住,在应用程序中存储凭据的最佳方法是使用Apple钥匙串,您可以在Apple网站上找到API参考。

就像说的那样-避免使用全局变量,但是如果您确实需要它们,请像使用c语言一样进行操作:

在一个文件中定义此变量

在所有其他文件中,使用extern关键字引用它

简单:不要这样做!

我建议将凭据存储在钥匙串中。 但是不要使用Apple提供的示例代码。 没用 我在项目中使用SSKeychain

如果您不需要存储凭据,则应按照aleroot的建议,使用单例或仅包含一个实例的类。

三个答案:

  • 不要这样
  • 如果必须这样做,请使用Singleton。
  • 要非常轻松地访问用户名和非机密(即密码)变量,请使用NSUserDefaults。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM