在Xcode裡面,預設為ARC(auto reference counting),也就是自動記憶體管理機制,在這裡我們要瞭解的是記憶體管理,肯定是不能讓系統幫我們管理記憶體,我們需要將ARC關閉,首先在左邊選中你所創建的工程,點擊build setting,Objective-C atomic refer ...
在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.沒有使用這個對象了,卻沒有釋放這個對象