1.在objc中物件是儲存在堆中的,系統並不會自動釋放堆中的記憶體(注意基本型別例如int,float是由系統自己管理的,放在棧上)
2.我們可以通過dealloc方法來檢視是否乙個物件已經被**,如果沒有被**則有可能造成記憶體洩露。如果乙個物件被釋放之後,那麼最後引用它的變數
我們手動設定為nil,否則可能造成野指標錯誤,而且需要注意在objc中給空物件傳送訊息是不會引起錯誤的。野指標錯誤形
式在xcode中通常表現為:thread 1:exc_bad_access(code=exc_i386_gpflt)錯誤。因為你訪問了一塊已經不屬於你的記憶體。
3.手動管理記憶體有時候並不容易,因為物件的引用有時候是錯綜複雜的,物件之間可能互相交叉引用,此時需要遵循乙個法則:
誰建立,誰釋放。
4.retain,通常用於非字串物件
-(void
)seta:(car *)a
}
copy,通常用於字串物件、block、nsarray、nsdictionary
-(5.autorelease方法不會改變物件的引用計數器,只是將這個物件放到自動釋放池中;void
)seta:(nsstring *)a
}
6.自動釋放池實質是當自動釋放池銷毀後呼叫物件的release方法,不一定就能銷毀物件(例如如果乙個物件的引用計數器》1則此時就無法銷毀);
7.由於自動釋放池最後統一銷毀物件,因此如果乙個操作比較占用記憶體(物件比較多或者物件占用資源比較多),最好不要放到自動釋放池或者考慮放到多個自動釋放池;
8.objc中類庫中的靜態方法一般都不需要手動釋放,內部已經呼叫了autorelease方法;
9.不同於xcode4可以在建立工程時選擇關閉arc,xcode5在建立的工程是預設開啟arc,沒有可以關閉arc的選項。
如果需要對特定檔案開啟或關閉arc,可以在工程選項中選擇targets -> compile phases -> compile sources,在裡面找到對應檔案,新增flag:
開啟arc:-fobjc-arc
關閉arc:-fno-objc-arc
10.某些具體介紹參考該**,十分詳細
參考**:
iOS平台記憶體管理的那些事
ios平台的記憶體管理採用引用計數的機制。當建立乙個物件時使用alloc或者allwithzone方法時,引用計數就會 1 當釋放物件使用release方法時,引用計數就是 1 這就意味著每乙個物件都會跟蹤有多少其他物件引用它,一旦引用計數為0,該物件的記憶體就會被釋放掉 另外,ios也提供了一種延...
iOS開發關於 框架 的那些事
在 ios 8 之前,ios 只支援以靜態庫的方式來使用第三方的 與靜態相對應的當然是動態。我們每天使用的 ios 系統的框架是以 framework 結尾的,它們就是動態框架。ios 8 之前也有一些第三方庫提供 framework 檔案,但是它們實質上都是靜態庫,只不過通過一些方法進行了包裝,相...
iOS開發那些事 響應記憶體警告
好的應用應該在系統記憶體警告情況下釋放一些可以重新建立的資源。在ios中我們可以在應用程式委託物件 檢視控制器以及其它類中獲得系統記憶體警告訊息。1 應用程式委託物件 2 檢視控制器 在檢視控制器中接收記憶體警告訊息,需要重寫didreceivememorywarning方法。viewcontrol...