全局变量是否始终保留在内存中?

时间:2016-09-24 07:09:40

标签: ios swift

以下是一些声明的全局常量和变量,所以我想知道这些初始化属性是否始终保留在内存中? 或者这些是我每次访问它们时计算出的属性,一旦创建了一个新实例,它的引用超出范围就会丢失吗?

let storyboard                      =   UIStoryboard(name: "Main", bundle: nil)
let APPDELEGATE                     =   UIApplication.sharedApplication().delegate as! AppDelegate
var mainNavigationController        :   UINavigationController?
var slideMenuNavigationController   :   UINavigationController?
let clientIDInstagrm                =   "favf5"
var selectPhotoCount                =   0


//URL
let BASE_URL_FOR_ALBUM            = "http://admin.com/"
let BASE_URL                      = "http://admin.com"



//SIGN UP KEYS
let kNAME           =   "name"
let kEMAIL          =   "email"
let kPASS           =   "password"
let kAPP_KEY        =   "appkey"
let kDEVICE_TOKEN   =   "device_token"
let kDEVICE_TYPE    =   "device_type"
let kServiceMethod  =   "method"
let kSocialType     =   "social_type"
let kSocial_id      =   "social_id"
let kMethod         =   "method"

//KEYS RESPONSE
let kERROR_CODE     =   "error_code"
let kUSER_DETAIL    =   "User_details"
let kUSERNAME       =   "username"
let kIS_SELECTED    =   "SELECTED"

//BOOK PAGES KEYS
let kTEMPLATE_TYPE  =   "templateType"
let kIMAGE_1        =   "img1"
let kIMAGE_2        =   "img2"
let kIMAGE_3        =   "img3"
let kRightSidePage  =   "RightSidePage"

1 个答案:

答案 0 :(得分:4)

全局变量总是存在于内存中,直到它们被释放并根据它们的范围工作,无论它们是存在于某个块中还是对整个类可见,但为了保持引用(创建新实例),您需要了解静态变量概念。

静态变量:是为程序的整个生命周期分配的变量。在所有函数/方法调用中都保持static变量的值。 当在函数外部声明时,静态变量对于声明它的文件中的所有内容都是可见的,当在函数或方法中声明时,它只在该函数或方法中可见,但值保留在呼叫。

Exapmle:

int method(void)
{
    int i = 5;
    i += 10;
    return i;
}

此处方法每次调用时返回15,但如果您使变量i static见下文。

int method(void)
{
    static int i = 5;
    i += 10;
    return i;
}

这里每次调用它都会返回15,25,35等等,因为变量i保留了之前的调用引用。

静态变量用法,用于控制翻译单元中变量的可见性。因此,如果您只想在文件中访问某些变量,就像 C 一样,您可以创建它们:

static NSString *s = [[NSString alloc] initWithString:@"Hello"];

这可能会引起内存泄漏。

修改

为了取消整个应用程序可见的常量,在标题中将它们声明为extern并在.m中定义它们:

//.h
extern NSString *const yourVariableNameKey;

//.m
NSString *const yourVariableNameKey = @"some value";

符号常量就像 c

// declare them where you write import statement 
// to access just import the class where you dec those variables and access by name

#define variable_1 @"string value"
#define variable_2 10  // int value

编辑2:

在swift中

struct Constants {
    static let someNotification = "TEST" 
}

然后在您的代码中将其称为:

print(Constants.someNotification)