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