簡體   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