热门标签 | HotTags
当前位置:  开发笔记 > IOS > 正文

iOS中EXC_BAD_ACCESS解决办法

在iOS开发过程中m,经常会出现EXC_BAD_ACCESS错误而导致程序崩溃。出现这个错误的原因是由于你的对象已经被释放了,而你又调用了它的方法,相当于java中的空指针异常。很多iOS新手基本上都会遇到这个问题,尤其是对象使用了autorelease,或者自己手工过早的

在iOS开发过程中m,经常会出现EXC_BAD_ACCESS错误而导致程序崩溃。出现这个错误的原因是由于你的对象已经被释放了,而你又调用了它的方法,相当于java中的空指针异常。很多iOS新手基本上都会遇到这个问题,尤其是对象使用了autorelease,或者自己手工过早的

在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就不会这么麻烦了。

移动开发

推荐阅读
  • 作为一名在大型手机游戏公司工作的程序员,尽管主要负责游戏逻辑和内容的开发,但对iOS底层开发接触较少。现在有了iPhone和可以虚拟MAC环境的电脑,希望能找到有效的iOS开发学习路径。 ... [详细]
  • iOS 10 系统下 AVPlayer 视频播放故障排除
    在使用 iOS 10 系统时,如果遇到 AVPlayer 无法正常播放视频的问题,这可能是由于 Xcode 中异常处理设置不当导致的。本文将详细探讨如何调整 Xcode 设置以解决这一问题。 ... [详细]
  • 本文详细介绍了如何在iOS5中创建和理解简单的Hello World应用,包括Interface Builder的使用、Objective-C源代码文件的结构以及事件处理机制。 ... [详细]
  • 本文档提供了在iOS开发中使用OClint进行静态代码分析的详细步骤,包括安装、更新和使用方法,以及相关资源链接。 ... [详细]
  • Xcode 快捷键与实用技巧
    在iOS开发过程中,熟练掌握Xcode的快捷键可以显著提升工作效率,减少不必要的鼠标操作,让开发者更加专注于代码编写。本文将介绍一些常用的Xcode快捷键及技巧,帮助开发者提高开发效率。 ... [详细]
  • 本文探讨了如何在字符串中无条件地将一个值替换为另一个值,即使原值不断变化。例如,无论原始值是2、4还是5,都能将其成功替换。 ... [详细]
  • 本文介绍了iOS应用开发的主要框架,包括Foundation、UIKit、CoreData及CoreGraphics等,并探讨了开发iOS应用所需的硬件和软件环境,以及推荐的编程语言。 ... [详细]
  • 本文总结了在使用React Native开发过程中遇到的一些常见问题及其解决方法,包括配置错误、依赖问题和特定组件的使用技巧。 ... [详细]
  • 在现代移动应用开发中,尤其是iOS应用,处理来自服务器的JSON数据是一项基本技能。无论是使用Swift还是PHP,有效地解析和利用JSON数据对于提升用户体验至关重要。本文将探讨如何在Swift中优雅地处理JSON,以及PHP中处理JSON的一些技巧。 ... [详细]
  • 代码生成器实战教程:提升编程效率的利器
    本系列文章旨在通过一系列实践案例,详细介绍如何利用代码生成器提高开发效率。本文将引导您完成从下载安装到实际应用的全过程。 ... [详细]
  • 万事起于配置开发环境
    万事起于配置开发环境 ... [详细]
  • 本文详细介绍了Objective-C中的面向对象编程概念,重点探讨了类的定义、方法的实现、对象的创建与销毁等内容,旨在帮助开发者更好地理解和应用Objective-C的面向对象特性。 ... [详细]
  • iOS 小组件开发指南
    本文详细介绍了iOS小部件(Widget)的开发流程,从环境搭建、证书配置到业务逻辑实现,提供了一系列实用的技术指导与代码示例。 ... [详细]
  • 本文详细介绍了如何在最新版本的Xcode中重命名iOS项目,包括项目名称、应用名称及相关的文件夹和配置文件。通过本文,开发者可以轻松完成项目的重命名工作。 ... [详细]
  • 在尝试加载支持推送通知的iOS应用程序的Ad Hoc构建时,遇到了‘no valid aps-environment entitlement found for application’的错误提示。本文将探讨此错误的原因及多种可能的解决方案。 ... [详细]
author-avatar
明诺新源研_889
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有