管理範圍: 管理任何繼承NSObject的對象,對其他的基本數據類型無 效 本質原因是因為對象和其他數據類型在系統中的存儲空間不一樣,其它局部變數主要存放於 棧中,而對象存儲於堆中,當代碼塊結束時這個代碼塊中涉及的所有局部變數會被回收,指 向對象的指針也被回收,此時對象已經沒有指針指向,但依然存在於
管理範圍:
管理任何繼承NSObject的對象,對其他的基本數據類型無 效
本質原因是因為對象和其他數據類型在系統中的存儲空間不一樣,其它局部變數主要存放於 棧中,而對象存儲於堆中,當代碼塊結束時這個代碼塊中涉及的所有局部變數會被回收,指 向對象的指針也被回收,此時對象已經沒有指針指向,但依然存在於記憶體中,造成記憶體泄 露。
記憶體管理的原則
1)原則
只要還有人在使用某個對象,那麼這個對象就不會被回收; 只要你想使用這個對象,那麼就應該讓這個對象的引用計數器+1; 當你不想使用這個對象時,應該讓對象的引用計數器-1;
2)誰創建,誰release
(1)如果你通過alloc,new,copy來創建了一個對象,那麼你就必須調用release或者 autorelease方法
(2)不是你創建的就不用你去負責
3)誰retain,誰release
只要你調用了retain,無論這個對象時如何生成的,你都要調用release
4)總結
有始有終,有加就應該有減。曾經讓某個對象計數器加1,就應該讓其在最後-1.
:
1)空指針:沒有指向任何東西的指針,給空指針發送消息不會報錯 關於nil和Nil及NULL的區別:
nil: A null pointer to an Objective-C object. ( #define nil ((id)0) ) nil 是一個對象值。
Nil: A null pointer to an Objective-C class.
NULL: A null pointer to anything else. ( #define NULL ((void *)0) ) NULL是一個通用指針(泛型指針)。
NSNull: A class defines a singleton object used to represent null values in collection objects (which don't allow nil values).
[NSNull null]: The singleton instance of NSNull.
[NSNull null]是一個對象,他用在不能使用nil的場合。
@property
@property int age; 1)生成一個_age 2)生成get和set方法的聲明 3)生成 get和set方法的實現
@property (......) int age;
1)記憶體管理相關參數
retain:對對象release舊值,retain新值(適用於OC對象類型) assign:直接賦值(預設,適用於非oc對象類型) copy:release舊值,copy新值
驗證assign如果作用在對象上,實際上就是直接賦值 //使用@property增強型 生成get和set方法
@property(nonatomic,assign)Car *car; /*
.m文件中實際上生成的是
_car = car; //當對象release後,將無法使用該對象
*/
@property 參數(二)
1)是否要生成set方法(若為只讀屬性,則不生成)
readonly:只讀,只會生成getter的聲明和實現 readwrite:預設的,同時生成setter和getter的聲明和實現
2)多線程管理(蘋果在一定程度上屏蔽了多線程操作)
nonatomic:高性能,一般使用這個 atomic:低性能,預設
3)set和get方法的名稱
修改set和get方法的名稱,主要用於布爾類型。因為返回布爾類型的方法名一般以is開頭,修改名稱一般用 在布爾類型中的getter。
@property(nonatomic,assign, setter=abc:,getter=haha)int age 可以理解為把[psetAge:]------>[pabc:], [page] --------->[phaha];
@property(nonatomic,assign, setter=setVip:,getter=isVip) BOOL vip;