[英]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.