? ? ?
? ? ?循環(huán)引用,顧名思義就是開發(fā)過程中兩個對象之間互相引用嫁乘,形成一個環(huán)路。在MRC時代球碉,內存都是程序員手動管理蜓斧,每一個對象、實例都需要程序員通過retain release操作去控制引用計數(shù)睁冬,這種時候雖然更加繁瑣挎春,但是內存都在程序員的控制范圍內。但是在使用ARC的時候豆拨,由于內存是ios 在編譯期通過系統(tǒng)的判斷去動態(tài)的將內存控制代碼(retain release delloc)添加到代碼中的合適位置直奋。雖然很大程度上解決了開發(fā)人員,使得開發(fā)人員可以將精力更多的放到app功能的開發(fā)中施禾,但是由于內存管理對程序員的不可控脚线,使得在開發(fā)人員不知情的情況下發(fā)生內存泄漏的情況很容易發(fā)生。
? ? ? 如果程序中產(chǎn)生了循環(huán)引用的問題弥搞,會由于對象之間互相引用邮绿,導致兩者都得不到釋放,從而導致內存泄漏拓巧。
block在ios開發(fā)過程中使用的情況非常多斯碌,block塊中使用塊外的變量、對象的情況也非常多肛度,當我們在使用block的時候發(fā)生這樣的情況傻唾,就會產(chǎn)生內存泄露。
某對象是某block的擁有者,而block中又使用了此對象冠骄,這是很經(jīng)典的一個情況伪煤,解決的辦法一個是將此對象nil,另一中是解決循環(huán)引用通用的方法凛辣。
將循環(huán)引用的一方改為弱引用另一方 :__weak typeof(self) weakSelf=self; 等