[英]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的建议,使用单例或仅包含一个实例的类。
三个答案:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.