在Xcode里面,默認為ARC(auto reference counting),也就是自動內存管理機制,在這里我們要了解的是內存管理,肯定是不能讓系統幫我們管理內存,我們需要將ARC關閉,首先在左邊選中你所創建的工程,點擊build setting,Objective-C atomic reference counting,將YES改為NO。這時,你的工程就需要你自己來管理內存,因為此時系統不會在繼續幫你管理內存。

在C語言和OC里面,內存管理有很大區別,在C里面,通過malloc和realloc創建內存,用free來釋放內存,一旦調用free,這個對象會立即被釋放,但是在OC里面有很大的不同,OC通過引用計數機制(retain count)來管理內存,當一個對象通過alloc,copy,mutablecopy,new來創建的時候,那么這個對象就被創建者擁有,此時它的retain count為1,在后面可以通過retain修飾來聲明對一個不是自己創建的對象的擁有權,沒對這個對象聲明一次擁有權,這個對象的retain count就會+1,如果要釋放對這個對象的擁有權,可以使用release,release釋放只能是釋放你自己對這個對象的擁有權,使這個對象的retain count -1,并不會摧毀這個對象,只有當這個對象的retain count 為0 的時候,系統才會去調用dealloc去釋放這個對象(注意:這里是釋放這個對象了,前面retain count -1的時候釋放的是擁有權,注意2:這里是系統自動調用dealloc方法,不需要我們手動調用),在這里我們可以重寫dealloc方法,讓這個對象在被釋放前做最后一點事(如果需要這個對象去做事的話,才去重寫。其實一般不會用到自己重寫dealloc方法,如果在這個類里面重寫了,系統會調用我們自己重寫的dealloc方法)。

手動管理內存通常會出現兩種錯誤:

1.還在使用這個對象卻已經將這個對象釋放了

2.沒有使用這個對象了,卻沒有釋放這個對象