Objective-C基礎學習之內存管理簡介

1.內存管理的重要性

  • 移動設備的內存極其有限,每個app所能占用的內存是有限制的

  • 下列行為都會增加一個app的內存占用

    • 創建一個OC對象
    • 定義一個變量
    • 調用一個函數或者方法
  • 當app所占用的內存較多時,系統會發出內存警告,這時得回收一些不需要再使用的內存空間。比如回收一些不需要使用的對象、變量等

  • 如果app占用內存過大, 系統可能會強制關閉app, 造成閃退現象, 影響用戶體驗

2.什么是內存管理

  • 如何回收那些不需要再使用的對象?

    • 那就得學會OC的內存管理
  • 所謂內存管理, 就是對內存進行管理, 涉及的操作有:

    • 分配內存 : 比如創建一個對象, 會增加內存占用
    • 清除內存 : 比如銷毀一個對象, 能減小內存占用
  • 內存管理的管理范圍

    • 任何繼承了NSObject的對象
    • 對其他非對象類型無效(int、char、float、double、struct、enum等 )
  • 只有OC對象才需要進行內存管理的本質原因

    • OC對象存放于堆里面
    • 非OC對象一般放在棧里面(棧內存會被系統自動回收)

3.堆和棧

  • 棧(操作系統):由操作系統自動分配釋放,存放函數的參數值,局部變量的值等。其操作方式類似于數據結構中的棧(先進后出);

  • 堆(操作系統):一般由程序員分配釋放,若程序員不釋放,程序結束時可能由OS回收,分配方式類似于鏈表。

  • 示例:

int main(int argc, const char * argv[])
{
    @autoreleasepool {
        int a = 10; // 棧
        int b = 20; // 棧
        // c : 棧
        // Car對象(計數器==1) : 堆
        Car *c = [[Car alloc] init];
    }
    // 經過上一行代碼后, 棧里面的變量a\b\c都會被回收
    // 但是堆里面的Car對象還會留在內存中,因為它是計數器依然是1
    return 0;
}
棧和堆.png
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容