堆和棧的區別 -- 本次存貯哪幾種方式

棧區(stack) --由編譯器自動分配釋放,存放函數的參數值,局部變量的值。

堆區 (heap) ---一般有程序員分配釋放。

全局區(靜態區)(static) --全局變量和靜態變量,程序結束後由系統釋放。

文字常量區 -- 常量字符串存放在這裏,程序結束後由系統釋放。

程序代碼區 ---存在行數體的二進制文件。


棧:只要棧的剩餘空間大於所申請空間,系統將爲程序提供內存,否則將報異常提示棧溢出。

堆:首先應該知道操作系統有一個記錄空閒內存地址的鏈表,當系統收到程序的申請時,會遍歷該鏈表,尋找第一個空間大於所申請空間的堆結點,然後將該結點從空閒結點鏈表中刪除,並將該結點的空間分配給程序,另外,對於大多數系統,會在這塊內存空間中的首地址處記錄本次分配的大小,這樣,代碼中的delete語句才能正確的釋放本內存空間。另外,由於找到的堆結點的大小不一定正好等於申請的大小,系統會自動的將多餘的那部分重新放入空閒鏈表中。


1、          iOS本地數據存儲都有哪幾種方式?iOS如何實現複雜對象的存儲?

1、        NSKeyedArchiver(歸檔)採用歸檔的形式來保存數據,該數據對象需要遵守NSCoding協議,並且該對象對應的類必須提供encodeWithCoder:和initWithCoder:方法。

2、        NSUserDefaults:用來保存應用程序設置和屬性、用戶保存的數據。用戶再次打開程序或開機後這些數據仍然存在。NSUserDefaults可以存儲的數據類型包括:NSData、NSString、NSNumber、NSDate、NSArray、NSDictionary。

3、        Write寫入方式:永久保存在磁盤中。

4、        SQLite(FMDB、CoreData)

NSCoding +NSKeyedArchiver實現複雜對象的存儲。





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章