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