- 不要等到明天,明天太遙遠,今天就行動。
須讀:看完該文章你能做什么?
了解內存管理的概念
學習前:你必須會什么?(在這里我已經默認你具備C語言的基礎了)
什么是內存。什么是棧,什么是堆,創建一個對象在棧堆、是怎么存儲的
一、本章筆記
一、內存管理的重要性
如果app用的內存過大,會強制關閉APP
二、什么是內存管理
分配內存 和 清除內存
// 內存管理的管理范圍
任何繼承了NSObject的對象 都要進行內存管理
對于其他非 對象類型無需內存管理 (int、char、float、double、struct、enum)等
#warning 存儲的對象 都會存放到堆里面, 棧里面系統會幫我們自動釋放
// 只有OC對象才需要進行內存管理的本質原因
OC對象存放于堆 里面
非OC對象一般存放在棧里面(棧內存會被系統 自動回收)
三、棧和堆
棧(操作系統): 由操作系統自動分配釋放, 存放函數的參數值, 局部變量的值等,
其操作方式類似于 數據結構中的棧(先進后出);
堆(操作系統) : 一般有程序員分配釋放, 若程序員不釋放, 應用結束可能由OS回收,分配方式 到似于鏈表。
二、code
main.m
#pragma mark 01-內存管理基本概念
/*
一、內存管理的重要性
如果app用的內存過大,會強制關閉APP
二、什么是內存管理
分配內存 和 清除內存
// 內存管理的管理范圍
任何繼承了NSObject的對象 都要進行內存管理
對于其他非 對象類型無需內存管理 (int、char、float、double、struct、enum)等
#warning 存儲的對象 都會存放到堆里面, 棧里面系統會幫我們自動釋放
// 只有OC對象才需要進行內存管理的本質原因
OC對象存放于堆 里面
非OC對象一般存放在棧里面(棧內存會被系統 自動回收)
三、棧和堆
棧(操作系統): 由操作系統自動分配釋放, 存放函數的參數值, 局部變量的值等,
其操作方式類似于 數據結構中的棧(先進后出);
堆(操作系統) : 一般有程序員分配釋放, 若程序員不釋放, 應用結束可能由OS回收,分配方式 到似于鏈表。
*/
#import <Foundation/Foundation.h>
#pragma mark 類
#pragma mark main函數
int main(int argc, const char * argv[])
{
int a = 10; // 棧
int b = 20; // 棧
// p : 棧
// person 對象(計算器 == 1) : 堆
/*
Person = *p = [[Person alloc]init];
*/
/*
記過上一行代碼后, 棧里面的變量a\b\p都會被回收,
但是堆里面的Person對象還會留在內存中, 因為它是計數器 依然是1
*/
return 0;
}
Person
>>>.h
#import <Foundation/Foundation.h>
@interface Person : NSObject
@end
>>>.m
#import "Person.h"
@implementation Person
@end