ARC工程是可以重寫dealloc方法並被系統調用的,但不需要手動調用父類的dealloc,手寫[super dealloc]方法會報錯,事實上系統會自動幫你調用父類的dealloc方法,不需要你實現。可以通過在dealloc方法中打印log查看控制器是否被釋放。
控制器在被pop后移出棧后會被釋放,但有些時候會發現控制器出棧的時候不會調用dealloc方法,歸根結底,是因為當前控制器被某個對象強引用了,控制器的引用計數不為0,系統無法幫你釋放這部分內存。
[timer invalidate]; // 銷毀timer
timer = nil; // 置nil
例如@property (nonatomic, weak) id<SLQPopViewDelegate>
即一個對象有一個Block屬性,然而這個Block屬性中又引用了對象的其他成員變量,那么就會對這個變量本身產生強應用,那么這個對象本身和他自己的Block屬性就形成了循環引用。在ARC下需要修改成這樣:(/也就是生成一個對自身對象的弱引用/)
__weak typeof(self) weakSelf = self;
即:保險起見block中所有的涉及到self的全給替換成weakSelf
這個控制器問題在程序中一直不被釋放,困擾了好久,萬惡的循環引用。
本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。