2016-09-24 101 views
2

这里是一些全局常量和变量声明,所以我想知道是否这些类型的初始化属性总是留在内存中? 还是这些计算的属性,每次我访问它们时,创建一个新的实例,并且一旦其引用超出范围就会丢失?全局变量是否总是停留在内存中..?

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" 

回答

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保留了以前的调用引用。

static用于控制变量单位中变量的可见性的变量用法。所以,如果你想只允许某些变量文件中进行访问,就像Ç,您可以创建他们喜欢:

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

这可能会提高内存泄漏。

编辑:

为了decleare常数是可见的整个应用程序声明为在头extern,并在定义它们。L:

//.h 
extern NSString *const yourVariableNameKey; 

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

符号常量就像Ç

// 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:

在迅速

struct Constants { 
    static let someNotification = "TEST" 
} 

然后在你的代码中调用它像这样:

print(Constants.someNotification) 
+0

声明常量的正确方法是什么? 我想声明整个应用程序中可见的常量,但是当我访问它们时,它们将获得内存。 –

+0

什么是快捷方式? –

+0

萨尔曼检查我的第二次编辑更新和.. – vaibhav

-1

这总是在内存中。

东西不相关的回答

你应该尽量避免全局变量,因为一切都使你的内存高是对你不好应用。所有可以减少内存的东西都应该集中。