iOS_项目完成后测试app
2015-12-14 22:07
309 查看
在项目中遇到各种问题:
(1)thread 1:exc_bad_access(code=1,address=0x10)
完全不知道错误出现在哪里。
错误原因:
exc_bad_access(code=1, address=0x789870)野指针错误,主要的原因是,当某个对象被完全释放,也就是retainCount,引用计数为0后。再去通过该对象去调用其它的方法就会出现野指针错误。
例如:
Person *jerry = [[Person alloc]init]; // retainCount引用计数为1
[jerry eat]; // 调用吃的方法
[jerry release]; // 释放jerry这个对象到 retainCount引用计数为0
// 此时如果继续引用jerry这个对象就会出现野指针错误,exc_bad_access
[jerry sleep];
解决方法:
首先得定位到哪里出现的这样野指针引用错误,如果是大型的项目代码量一大,找起来是非常痛苦的。
IOS提供了一个环境变量设置来帮忙定位错误位置的信息描述:NSZombieEnabled ,就是当
设置NSZombieEnabled环境变量后,一个对象销毁时会被转化为_NSZombie,设置NSZombieEnabled后,当你向一个已经释
放的对象发送消息,这个对象就不会向之前那样Crash或者产生一个难以理解的行为,而是放出一个错误消息,然后以一种可预测的可以产生debug断点的
方式消失,
因此我们就可以找到具体或者大概是哪个对象被错误的释放了。
例如会出现这样的提示:
[jerry sleep]:message sent to deallocated instance 0x78d7ed0
设置NSZombieEnabled环境变量,XCode4中:
你可以点击 Xcode4 菜单 Product -> Edit Scheme-> Arguments, 然后将点击”加号”, 将
NSZombieEnabled 参数加到Environment Variables 窗口中, 后面的数值写上 ”YES”.
或者在 Xcode4 菜单 Product -> EditScheme -> Diagnostics 设置窗口中直接勾上Enable ZombieObjects 即可,Xcode 可用 cmd+shift+< 进到这个窗口。
按照上面的步骤做完后,再次运行程序,不断操作,发现错误是"*** -[SDCycleScrollView scrollViewDidScroll:]: message sent to deallocated instance 0x12db0bac0",错误位置在”[SDCycleScrollView scrollViewDidScroll:]“方法中,后来发现是SDCycleScrollView已经释放,但是[b]SDCycleScrollView的定时器却没有被释放。[/b]
(1)thread 1:exc_bad_access(code=1,address=0x10)
完全不知道错误出现在哪里。
错误原因:
exc_bad_access(code=1, address=0x789870)野指针错误,主要的原因是,当某个对象被完全释放,也就是retainCount,引用计数为0后。再去通过该对象去调用其它的方法就会出现野指针错误。
例如:
Person *jerry = [[Person alloc]init]; // retainCount引用计数为1
[jerry eat]; // 调用吃的方法
[jerry release]; // 释放jerry这个对象到 retainCount引用计数为0
// 此时如果继续引用jerry这个对象就会出现野指针错误,exc_bad_access
[jerry sleep];
解决方法:
首先得定位到哪里出现的这样野指针引用错误,如果是大型的项目代码量一大,找起来是非常痛苦的。
IOS提供了一个环境变量设置来帮忙定位错误位置的信息描述:NSZombieEnabled ,就是当
设置NSZombieEnabled环境变量后,一个对象销毁时会被转化为_NSZombie,设置NSZombieEnabled后,当你向一个已经释
放的对象发送消息,这个对象就不会向之前那样Crash或者产生一个难以理解的行为,而是放出一个错误消息,然后以一种可预测的可以产生debug断点的
方式消失,
因此我们就可以找到具体或者大概是哪个对象被错误的释放了。
例如会出现这样的提示:
[jerry sleep]:message sent to deallocated instance 0x78d7ed0
设置NSZombieEnabled环境变量,XCode4中:
你可以点击 Xcode4 菜单 Product -> Edit Scheme-> Arguments, 然后将点击”加号”, 将
NSZombieEnabled 参数加到Environment Variables 窗口中, 后面的数值写上 ”YES”.
或者在 Xcode4 菜单 Product -> EditScheme -> Diagnostics 设置窗口中直接勾上Enable ZombieObjects 即可,Xcode 可用 cmd+shift+< 进到这个窗口。
按照上面的步骤做完后,再次运行程序,不断操作,发现错误是"*** -[SDCycleScrollView scrollViewDidScroll:]: message sent to deallocated instance 0x12db0bac0",错误位置在”[SDCycleScrollView scrollViewDidScroll:]“方法中,后来发现是SDCycleScrollView已经释放,但是[b]SDCycleScrollView的定时器却没有被释放。[/b]
相关文章推荐
- iOS开发之FMDB
- iOS RAC下的MVVM
- Android:Fragment 初步之旅 随记一
- Android学习笔记——SwipeRefreshLayout 官方下拉刷新控件介绍
- iOS 观察者模式
- iOS_开发中遇到的那些问题_5
- iOS开发之GData
- Android-JNI(1)-简介
- iOS开发之EGOImageLoading
- Android:Activity 相关的东西 随记一
- Android拓展系列(5)--CyanogenMod源码下载和编译(Android ROM定制基础篇)
- cocos2d-x学习笔记(13)触摸事件(多点触摸)
- iOS开发之SDWebImage
- Android:ViewPager 随记一
- Android Xfermode 真实 实现全面、圆角图片
- Json数据格式介绍、使用Android自带类库完成Json生成与解析
- java ObjectInputStream学习小记
- Android: ListView 性能调优二 随记
- Android自定义类似联系人列表的 快速索引控件
- object is not afunction错误