解决EXC_BAD_ACCESS错误的一种方法--NSZombieEnabled
来源:互联网 发布:爬山算法 贪心算法 编辑:程序博客网 时间:2024/04/29 03:13
我们做iOS
比如你对已释放的对象发送消息时就会出现,EXC_BAD_ACCESS,再如release
比如
- static NSMutableArray*array;
- -(void)viewDidLoad
- {
- [superviewDidLoad];
- array= [[NSMutableArray alloc]initWithCapacity:5];
- [array release];//释放掉该数组
- }
- - (void)viewWillAppear:(BOOL)animated{
- [array addObject:@"Hello"];//使用释放掉的数组
- }
上面的代码就会出现EXC_BAD_ACCESS 错误,但我执行时 Xcode 一出错却是定位在我在 AppDelegate 的 application:didFinishLaunchingWithOptions: 方法上的某行了,如果代码量多了,要查找具体问题非常难,但凭经验了。
不过NSZombieEnabled
对
*** -[__NSArray addObject:]:message sent to deallocated instance 0x6557370
如何设置
Xcode3
1.
2.
3.
Xcode4
你可以点击 Xcode4 菜单 Product -> Edit Scheme-> Arguments, 然后将点击”加号”, 将 NSZombieEnabled 参数加到Environment Variables 窗口中, 后面的数值写上 ”YES”.
或者在 Xcode4 菜单
Xcode4
另外再说一下,如果没有为
- static NSMutableArray*array;
- -(void)viewDidLoad
- {
- [super viewDidLoad];
- array= [[NSMutableArray alloc]initWithCapacity:5];
- [array release];
- [array addObject:@"Hello"];//之所以不会crash,是在于事件周期未完,内存回收机制还没有执行,没有真正的回收掉array的对象内存。
- NSLog(@"%@",[array objectAtIndex:0]);
- }
但是一旦加上了NSZombieEnable
*** -[__NSArrayM addObject:]:message sent to deallocated instance 0x6557370
即使该array
- CocoaDev,个人觉得讲Cocoa技术十分专业的网站之一,下面的链接详细讲了讲NSZombieEnable的原理。http://www.cocoadev.com/index.pl?NSZombieEnabled
- 苹果官方的Mac OS X Debugging Magic,详细讲述了最为一个高级苹果程序员应该具备的调试技巧
http://developer.apple.com/library/mac/#technotes/tn2004/tn2124.html - 其实还可以在Instruments中开启NSZombie选项,这样就可以在Instruments中直接查看crash时候的callstack了:http://www.markj.net/iphone-memory-debug-nszombie/
最后提醒NSZombieEnabled只能在调试的时候使用,千万不要忘记在产品发布的时候去掉,因为NSZombieEnabled不会真正去释放dealloc对象的内存,一直开启后果可想而知,自重!
本文链接 http://unmi.cc/nszombieenabled-locate-exc_bad_access-error,来自隔叶黄莺 Unmi Blog
- 解决EXC_BAD_ACCESS错误的一种方法--NSZombieEnabled
- 解决EXC_BAD_ACCESS错误的一种方法--NSZombieEnabled
- 解决EXC_BAD_ACCESS错误的一种方法--NSZombieEnabled
- 解决EXC_BAD_ACCESS错误的一种方法--NSZombieEnabled
- 解决EXC_BAD_ACCESS错误的一种方法--NSZombieEnabled
- 解决EXC_BAD_ACCESS错误的一种方法--NSZombieEnabled
- 解决EXC_BAD_ACCESS错误的一种方法--NSZombieEnabled
- 解决EXC_BAD_ACCESS错误的一种方法--NSZombieEnabled
- 解决EXC_BAD_ACCESS错误的一种方法--NSZombieEnabled
- Xcode 解决EXC_BAD_ACCESS错误的一种方法--NSZombieEnabled
- iOS 开发 解决EXC_BAD_ACCESS错误的一种方法--NSZombieEnabled(转)
- ios 调试技巧收藏 一 解决EXC_BAD_ACCESS错误的一种方法--NSZombieEnabled
- ios 调试技巧收藏 一 解决EXC_BAD_ACCESS错误的一种方法--NSZombieEnabled
- ios 调试技巧收藏 一 解决EXC_BAD_ACCESS错误的一种方法--NSZombieEnabled
- NSZombieEnabled 解决EXC_BAD_ACCESS错误
- 用NSZombieEnabled解决恼人的EXC_BAD_ACCESS错误
- 用NSZombieEnabled解决恼人的EXC_BAD_ACCESS错误
- 用NSZombieEnabled解决恼人的EXC_BAD_ACCESS错误
- 连接池的作用及讲解
- java NIO 传送文件
- uva 1494 Qin Shi Huang's National Road System (次小生成树)
- linux下java高内存故障排查
- 设计模式_C++中的单例模式
- 解决EXC_BAD_ACCESS错误的一种方法--NSZombieEnabled
- 动态规划
- 利用dbunit 进行单元测试
- 系统地图定位
- MFC实现BCB中的ProcessMessages
- Oracle数据库中,知道一张表,查询与其有主外键关系的表
- 南阳 oj 比大小 题目73
- MySQL修改用户权限
- 什么函数不能成为虚函数 C++