使用了 ARC 以後,無疑大大減小了程序員進行內存管理的壓力。你不再用寫 release/autorelease 代碼了,不再用寫dealloc 方法了。但這不等於程序員不須要內存管理。例如,你須要在 viewDidUnload 方法中對對象進行釋放,以防當內存警告發生時,你沒有內存能夠回收。固然ARC 託管對象的釋放方式與 MRC 是不一樣的。對於 ARC 託管對象,你必須用 ARC 特有的兩種釋放方式:程序員
[self setOjbect:nil];安全
或者:spa
self.object=nil;orm
這裏,object 是你要釋放的對象名稱。對象
這兩種釋放方式基本上是等效的,甚至許多書籍宣稱兩者徹底等效。對於有 Java/C++/C# 開發經驗的程序員來講,點語法的調用顯然更加親切。內存
但我要告訴你的是,兩者並非徹底等同。對於 object 對象並未初始化(爲nil)的狀況下,[self setObject:nil] 顯得更安全。開發
若是 object 未初始化,self.object=nil 調用會致使一個「向已銷燬的對象發送消息」錯誤,同時程序崩潰。 而[selfsetObject:nil]則根本不會。get
【聲明】確實是筆者理解錯誤,大部分狀況下二種釋放方式是徹底同樣的。但某種狀況下例外,筆者曾經跟蹤過一個程序,這個程序會莫名其妙 crash,後將 self.object=nil 一句換成 [self setObject:nil] 就不會了。具體緣由不明,猜想到的一種多是, object 對象 setter/getter 方法被重載。it