Objective-C記憶體管理相關的面試題,objective-c記憶體管理

來源:互聯網
上載者:User

Objective-C記憶體管理相關的面試題,objective-c記憶體管理
iOS應用程式出現Crash(閃退),90%以上的原因是記憶體問題。在一個擁有數十個甚至是上百個類的工程裡,尋找記憶體問題極其困難。瞭解記憶體常見問題,能幫我們減少出錯幾率。記憶體問題體現在三個方面:記憶體溢出、野指標異常,記憶體過渡釋放。
在面試過程中,面試官也經常會問到關於記憶體方面的問題,在這裡,我和大家分享兩個簡單地面試題。
面試題一:

    @autoreleasepool {        for (long i = 0; i < largeNumber; i++) {                Person *per = [[Person alloc] init];                [per autorelease];        }    }
其中largeNumber是一個很大的數,這道題有記憶體問題嗎?如果有請在不修改已經寫好代碼的情況下解決記憶體問題。我們都知道,記憶體管理的原則:如果對一個對象使用了alloc、copy、retain,那麼你必須使用相應的release或者autorelease。咋一看,這道題目有alloc,也有autorelease,兩者對應起來了,沒問題。但是我們來仔細推敲一下,autorelease雖然會使引用計數減一,但是它並不是立即減一,它的本質功能只是把對象放在離他最近的自動釋放池中,當自動釋放池銷毀了,才會向自動釋放池中的每一個對象發送release訊息。那麼,這道題的問題就在autorelease這裡。因為largeNUmber是一個很大的數,autorelease又不能使引用計數立即減一,所以在迴圈結束前會造成記憶體溢出的問題。解決方案如下:
    @autoreleasepool {        for (long i = 0; i < largeNumber; i++) {            @autoreleasepool {                Person *per = [[Person alloc] init];                [per autorelease];            }        }    }

在迴圈內部再加一個自動釋放池,這樣就能保證每建立一個對象就能及時釋放。
面試題二:
    @autoreleasepool {        NSString *per = [[NSString alloc] init];        [per retain];          [per retain];          per = @"aa";           [per release];        [per release];        [per release];    }
這道題同樣有記憶體問題,存在如下問題,1.記憶體溢出問題。2.指向常量區的對象不用release。我們來分析一下這道題,表面看起來,alloc,retain和release對應起來了,貌似沒什麼問題。但是我們分析一下per = @"aa"; 這條語句。指標變數per原本指向一塊開闢的堆區空間,但是經過重新給per賦值,那麼per的指向就發生了改變,由原來指向堆區空間,到指向常量區。指向常量區以後,再對per發送release訊息,它就是對常量區釋放,而常量區根本就不用釋放,這樣就導致原來開闢的堆區空間沒有釋放,會造成記憶體溢出的問題。



幫忙解釋一下Objective-C的記憶體管理部分

1.當你用alloc或者retain給對象分配了記憶體後要用release
2.不用的話,會很容易導致程式記憶體崩潰(如果是iPhone手機開發的話)
3.自動釋放池是你不用管的,一般在main函數裡面自動分配後自動回收
ps:樓主應該結合C語言理解,這個分配記憶體和回收記憶體思想來自C語言
 
對於objective-c的記憶體管理問題

我去。。得先release 再nil
[string release];
string = nil;

[task release];
task = nil;
 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.