1.UIViewController的retainCount在某些情況下表現(xiàn)的和我們看到的不太一樣;例如下面的代碼:
2.UIView * mainView = xxx;
3.UIViewController * subVC = [[UIViewController alloc] init];//這里subVC的retainCount=1
4.[mainView addSubview:subVC.view];//這里subVC的retainCount =3,增加了2
Then later,
5.[subVC.view removeFromSuperview]; //這里subVC的retainCount為4;增加了1
6.[subVC release];//這里subVC引用計數(shù)為3,減少了1
實際上我們期待在6的時候subVC的引用計數(shù)為0,并且dealloc被調(diào)用,但實際上沒有。那么為什么呢?
為了驗證這個問題,我們將這個指針在指針在6之后保存下來:
UIViewController * temp = subVC;
作為一個全局變量。
等一段時間后,調(diào)用 temp.retainCount,這個時候代碼會crash,這說明什么?
說明temp已經(jīng)是無效的指針了。
到此可以證明UIViewController在做removeFromSuperView的時候是delay,并且做了一次autorelease(不知道出于說明目的,或許是為了防止動畫),等所有動作完成,其將所有的retainCount減為0.
因此,上面的這種寫法雖然最后retainCount不為0,但代碼沒有錯,也沒有內(nèi)存泄露。因此只要保證進行了和分配添加相反地操作,內(nèi)存就應該被釋放的。