一.為什麼要進行記憶體管理
• ø建立乙個oc物件
ø定義乙個變數
ø呼叫乙個函式或者方法 •
• 二.oc中的記憶體管理是管理的記憶體中的哪一部分:
我們知道:記憶體分為五大區域:棧區,堆區,資料去,bss段,**區。而最後三者是在程式啟動時由作業系統進行控制的,所以不需要我們管理。棧區儲存的也都是已經初始化的基本資料型別變數和函式。而我們建立的物件則分配在堆區中,是需要我們進行管理的。
三.記憶體管理的管理範圍
任何繼承了nsobject的物件(所有的oc物件,物件型別)
對其他非物件型別(基本資料型別)無效(int、char、float、double、struct、enum等)
四.記憶體管理的種類。
1.手動記憶體管理:m(manually
)r (reference)c (couting)
2系統自動管理:a(automatic )r (reference)c (couting)
在最新的xcode中,預設記憶體管理管理方式是arc想切換成mrc需要對其進行配置,如下:
五。引用計數器的介紹
物件在建立時,內部會自動建立乙個引用計數器retaincount,當retaincount=0時,系統會**當前物件,retaincount是唯一判斷標記。release會-1,retain會+1,retain後返回的是自己self指標。
#import @inte***ce person : nsobject
@end
@implementation person
@end
int main(int argc, const char * argv) return 0;}
OC基礎 手動記憶體管理
建立物件 1.分配記憶體空間,儲存物件 2.初始化成員變數 3.反回物件的指標位址 1.物件在完成建立的同時,內部會自動建立乙個引用計數器,這個計數器,是系統用來判斷是否 物件的唯一依據,當我們的引用計數 retaincount 0 的時候,系統會毫不猶豫 當前物件 2.物件release reat...
OC語法 2 2 記憶體管理 手動記憶體管理2
五 copy語法 這篇建議學過foundation框架之後再學習 本小節知識點 基本用法 1 乙個物件可以使用 copy 或者mutablecopy 方法來建立物件的副本,當我們操作副本的時候不影響原物件 2 copy 需要先實現 nscopying 協議,建立的是不可變副本 如 nsstring,...
OC手動管理記憶體時出現程式崩潰
今天寫程式時程式崩潰了,除錯了很久才找到了問題所在,一下是對這次問題的總結,希望對跟我這樣的新手有所幫助。如下 在手動管理記憶體時應該注意,例項變數在定義為 retain 模式時,在呼叫初始化方法中不應該是自己手動賦值,而是呼叫setter方法。何為手動賦值?見下面 在標頭檔案中宣告 propert...