歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

Objective-C中nil與release的區別與用法

做IOS開發的估計都對Objective-C的內存管理機制很頭疼,一不小心程序就會出內存洩露,我也不例外,前幾天被指針的置nil與release給搞慘了,今和大家詳細解說一下有關Objective-C中nil與release的區別與用法。

首先說一下他們兩的作用,nil就是把一個對象的指針置為空,只是切斷了指針與內存中對象的聯系,它對內存的釋放沒有什麼作用;而release才是真正用於內存釋放的,release後系統會將該塊內存標記為可用(可重新分配)。所以nil並沒有釋放內存,只有release才是真正釋放內存。

二者使用順序,如果沒有release就直接nil,那麼雖然不會出錯(release一個空指針是合法的),www.linuxidc.com 但卻等於自己制造了內存洩漏,因為nil之後release就已經不起作用了,我之前的教訓就是一不小心把nil擱在了release之前,所以leak一直報內存洩露。

相反,如果先release後設置nil,就不會出現這樣的問題,但是有人就會問,release而沒有設置nil,會怎樣?其實程序可能也不會報錯,但是要知道設置nil其實是為了防止指針錯亂,因為一個對象在release之後,給它所分配的內存就已經被釋放了,如果釋放之後不把指針置空的話,系統再誤用到到這個指針時,那麼程序就會崩潰(此種情況特別容易出現在延時調用函數中),如果釋放之後把它的指針置為空,則即便後面的程序用到該指針,也不會崩潰。所以Objective-C釋放內存時必須先release然後nil。

Copyright © Linux教程網 All Rights Reserved