iOS中EXC_BAD_ACCESS解决办法
? ? 在iOS開發過程中m,經常會出現EXC_BAD_ACCESS錯誤而導致程序崩潰。出現這個錯誤的原因是由于你的對象已經被釋放了,而你又調用了它的方法,相當于java中的空指針異常。很多iOS新手基本上都會遇到這個問題,尤其是對象使用了autorelease,或者自己手工過早的把對象release了。
? ? 解決這個問題很簡單,首先要定位到是哪個對象被釋放。一旦出現EXC_BAD_ACCESS,程序會僵死掉,也就是所謂的Zombie,在xcode 做一些配置就可以看出是哪個對象出問題了,步驟如下(我的xcode版本是4.2):
? ??Product->EditScheme->Run->Environment Variables,添加NSZombieEnabled,并設置其值為YES,這樣當出現
EXC_BAD_ACCESS,就可以在控制臺中看到是哪個對象被釋放掉了。
? ? 另外要避免頻繁的出現上述問題,下面是一些建議:
1. 當引用了別人傳遞進來的對象時,最好retain一下,避免在別人那里已經把對象release了,記得不用是要手工release
2. 如果使用了系統的通過靜態方法來生成的對象,比如:[UIButton buttonWithType:UIButtonTypeRoundedRect],這些都是系統為了做好了autorelease,如果你不是很確定什么時候用到或者釋放掉的話,最好也retain一下,同樣記得用完后release掉
3. 一般建議在初始化的時候alloc你的對象,然后在delloc方法中釋放,這樣可以確保在整個過程中對象沒有被release掉
4. 個人不太建議頻繁的使用autorelease,一方面是,容易出現EXC_BAD_ACCESS錯誤;另一方面過多的使用autorelease會影響性能。因為autorelease不知道什么時候被釋放,如果在多線程或者是大的循環中用到的話,會堆積大量的對象,這樣你就不能依賴系統的autoReleasePool,而是要建立自己的autoReleasePool將他們包裝起來,以便提前釋放。顯然用release就不會這么麻煩了。
轉載于:https://blog.51cto.com/ikinglai/1079760
總結
以上是生活随笔為你收集整理的iOS中EXC_BAD_ACCESS解决办法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Exchange DAG备份恢复(六)-
- 下一篇: 【TDS学习文档4】IBM Direct