ios學習路線 Objective C MRC

2021-07-13 12:44:37 字數 1440 閱讀 8771

reference count引用計數

cocoa採用了引用計數機制,每乙個物件有乙個關聯的整型retaincount用於記錄物件的使用情況。物件被引用時retaincount+1,外部環境結束物件的使用後retaincount-1,當 retaincount為0的時候,該物件被銷毀。

objective-c物件的動作對應有哪些方法以及這些方法對引用計數有什麼影響?

記憶體管理原則:誰建立,誰釋放,誰引用,誰管理

autorelease

autorelease實際上只是把對release的呼叫延遲了,對於每乙個autorelease,系統只是把該object放入了當前的autorelease pool中,當該pool被釋放時,該pool中的所有object會被呼叫release。

對於每乙個runloop,系統都會隱式建立乙個autorelease pool,這樣所有的release pool會構成乙個像callstack一樣的乙個棧式結構,在每乙個runloop結束時,當前棧頂的autorelease pool會被銷毀,這樣這個pool裡的每個object會被release。

那什麼是runloop呢?乙個ui事件,timer call,delegate call,都會是乙個新的runloop。

例子如下:

nsstring* globalobject;

-(ibaction)onbuttonclicked

為什麼需要autorelease

1.很多c/c++轉過來的程式設計師會說,這個auto release有什麼好,象c/c++那樣,自己申請,自己釋放,完全可控不好麼, 這個auto relase 完全不可控,你都不知到它什麼時候會被真正的release。 我的理解它有乙個作用就是可以做到每個函式對自己申請的物件負責,自己申請,自己釋放,該函式的呼叫者不需要關心它內部申請物件的管理。 在下面這個例子中,func1的呼叫者不需要再去關心obj的釋放。

classa *func1()

實際上對於 [nsstring stringwithformat:] 這類建構函式返回的物件都是autorelease的。

2.autorelease pool來避免頻繁申請/釋放記憶體(就是pool的作用了)。這個應該是相對比較好理解的。

總結:

1.一定要注意autorelease pool的生存週期,理解runloop,避免在物件被釋放後使用。

2.[nsstring stringwithformat:]這類函式返回的物件是不需要再自己release的,它已經被autorelease了, 如果你想把它當乙個全域性物件使用,那必須自己再retain, 釋放時再release。

ios學習路線

sel在objective c中,sel是選擇器 selector 的乙個型別。選擇器就是指向方法的乙個指標,讀者可以簡單理解為程式執行到這裡就會執行指定的方法,可以這樣定義乙個選擇器 sel action button action 我們這樣使用乙個選擇器,下面的選擇器都叫做action foo ...

ios學習路線與計畫

非常感謝這張圖的作者,一張圖省了多少事,提高了多少效率,看這張圖ios的學習路線就基本知道了。另外再參考一下下面另一位前人的總結 1 第一點要求 能比較順暢的閱讀官方的文件 英語學習是個長期的過程,推薦一篇好文,具體教你如何學習和提高英語 老碼農教你學英語 2 學習官方的一些技術指南 這裡各種技術模...

Windows上編譯,學習Objective c

3 配置環境變數 這一步很重要。gnustep.sh是用來設定gnustep開發環境變數的,如果沒有執行,就會有很多標頭檔案,庫檔案,命令找不到 在乙個目錄裡寫好了源 以後,編寫乙個make配置檔案,名字必須叫gnumakefile,內容是 include gnustep makefiles com...