15章:內(nèi)存與對(duì)象

對(duì)象與內(nèi)存

15.1指針和指針的值

對(duì)象只能通過(guò)指針訪問(wèn),所以人們常用指向?qū)ο蟮闹羔榿?lái)稱呼該對(duì)象,例如有時(shí)候說(shuō)“now是一個(gè)NSDate實(shí)例”。然而,一定要記住指針和它指向的對(duì)象是不同的,準(zhǔn)確的說(shuō)法應(yīng)該是“now是一個(gè)指針變量,它保存了NSDate實(shí)例砸死內(nèi)存中的地址”。

        NSDate *currentTime =nil;
        NSLog(@"currentTime's value is %p",currentTime);

初始指針為nil,currentTime指向0x0

        NSDate *currentTime =[NSDate date];
        NSLog(@"currentTime's value is %p",currentTime);
        sleep(2);
        currentTime =[NSDate date];
        NSLog(@"currentTime's value is %p",currentTime);

現(xiàn)在currentTime指向了另一個(gè)實(shí)例,第一個(gè)NSDate實(shí)例我們已經(jīng)丟失了,盡管它還在堆上。

如果要改變currentTime的值,但仍然希望訪問(wèn)第一個(gè)NSDate實(shí)例,就需要聲明一個(gè)指針來(lái)存儲(chǔ)第一個(gè)NSDate實(shí)例的地址。

        NSDate *currentTime =[NSDate date];
        NSLog(@"currentTime's value is %p",currentTime);
        NSDate *startTime = currentTime;
        sleep(2);
        currentTime =[NSDate date];
        NSLog(@"currentTime's value is %p",currentTime);
        NSLog(@"the original object is %p",startTime);

15.2內(nèi)存管理

棧是由有序的幀構(gòu)成的。函數(shù)的幀會(huì)在函數(shù)結(jié)束后會(huì)自動(dòng)釋放,而堆里的對(duì)象不會(huì)自動(dòng)釋放。

管理堆很重要,因?yàn)槌绦蛘加玫亩汛笮∈怯邢薜?,而每個(gè)對(duì)象被創(chuàng)建后都會(huì)占用一定的堆內(nèi)存。

沒有指針指向第一個(gè)NSDate實(shí)例,從內(nèi)存管理的角度來(lái)看,這個(gè)對(duì)象已經(jīng)沒用了。但是它占用了寶貴的堆內(nèi)存,所以需要銷毀

15.3ARC

自動(dòng)銷毀不被引用的對(duì)象的機(jī)制稱為ARC。ARC是自動(dòng)引用計(jì)數(shù)的簡(jiǎn)稱,引用是指針的另外一種叫法。每個(gè)對(duì)象都會(huì)對(duì)自己的指針計(jì)數(shù)

當(dāng)引用數(shù)為0的時(shí)候,就會(huì)認(rèn)為不需要該對(duì)象了,程序會(huì)自動(dòng)銷毀該對(duì)象。如果項(xiàng)目開啟了ARC,編譯器會(huì)自動(dòng)給項(xiàng)目添加代碼來(lái)計(jì)數(shù)每個(gè)對(duì)象的引用計(jì)數(shù)

使用ARC,只能通過(guò)增加或減少對(duì)象的引用數(shù)來(lái)保留或者銷毀對(duì)象,而只用當(dāng)引用數(shù)為0時(shí),他才回被銷毀。

如果不再需要某個(gè)對(duì)象,則可以將指向它的指針設(shè)置為nil,活著銷毀它的指針。來(lái)銷毀對(duì)象。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 在那物質(zhì)生活匱乏的七十年代初; 在那一個(gè)偏遠(yuǎn)落后的小山村;在那一個(gè)有著微薄收入的大家庭,是沒有精彩的故事書可...
    xm雪梅閱讀 662評(píng)論 0 0
  • 作為一個(gè)資深路癡,我只知道上下和前后左右,拜托,別找你時(shí),告訴我你在東南還是西北。因?yàn)檫@壓根就像對(duì)一只迷路的兔子在...
    我是甘棠閱讀 684評(píng)論 2 4
  • 這些初中生與我那個(gè)年代不同,也許是與我更不同,他們是出生在北京這個(gè)大都市,接受的是最好的教育,最先進(jìn)的理念,而我出...
    相相閱讀 388評(píng)論 0 0
  • 學(xué)習(xí)runtime時(shí)查閱了很多相關(guān)博客,大多數(shù)講的都是概念性的理解,對(duì)runtime具體運(yùn)用介紹的非常少。這里我總...
    caixin閱讀 321評(píng)論 0 1
  • 編程語(yǔ)言 Swift Objective-C C++/C JavaScript 操作系統(tǒng) Mac OSX iOS ...
    左左4143閱讀 822評(píng)論 0 0

友情鏈接更多精彩內(nèi)容