一轻绞、介紹
- 參考鏈接: http://www.cocoachina.com/ios/20150109/10891.html
- 本文將介紹oc的內(nèi)存分布結(jié)構(gòu)懒叛,尤其是堆棧
二诅迷、內(nèi)存分布結(jié)構(gòu)圖
借用老前輩的圖,請見諒拱镐!
三、概念
棧區(qū):系統(tǒng)自動分配和管理內(nèi)存蜘欲,存放方法參數(shù)郭脂、局部變量等(就是變量名都儲存在棧上展鸡,這樣應(yīng)該可以)
堆區(qū):需要程序猿手動創(chuàng)建內(nèi)存和注銷
全局區(qū)/靜態(tài)區(qū):存放全局變量或者靜態(tài)變量
文字常量區(qū):存放字符串
程序代碼區(qū):存放二進(jìn)制代碼
什么時候銷毀呢?
上面的所有區(qū)域在變量在程序結(jié)束的時候,都會由系統(tǒng)自動釋放
四细疚、例子
// 類似以下的全局變量靜態(tài)變量,就是在全局/靜態(tài)區(qū)了
static NSString *str吧彪;// 全局變量,是在全局區(qū)
- (void)clicked:(NSString *)str {
// str 是方法參數(shù)啦扬,棧里
int a = 0; // a是局部變量,棧里
#注意:這個str是方法參數(shù)所以在棧里瞄摊,但是"123456"這個是字符串所以在文字常量區(qū)
str = @"123456";
#注意:這個是我們手動創(chuàng)建的,但是view這個變量(指針)是在棧里面的祟牲,
#但是這個view指向的內(nèi)存空間是在堆里面的
UIView *view = [[UIView allow] init];
}