Thread 1: EXC_BREAKPOINT (code=1, subcode=0x198d80a08) 错误集合

代码运行过程中常会遇到内存问题:Thread 1: EXC_BREAKPOINT (code=1, subcode=0x198d80a08)

这个报错提示很笼统,各个开发人员在开发过程中遇到的问题各不相同,下面来统计集合,希望能有你的答案

(PS:有遇到不同情况的朋友可以评论或者私信我,完善这篇文章,尽可能解决这个问题)

1.没有dealloc 对象

1.1 我遇到的场景:登陆App-->退出登陆,回到登陆界面-->再登陆,报错  (如下图: )

1.2 分析:通常这个错误提示出来,第一反应就是内存泄漏:哪个对象提前释放了,哪个对象没有被释放掉,但是一个个找真的很麻烦

1.3 解决:开启僵尸对象(Zombie Objects)来定位问题,在Xcode的菜单:Product->Scheme->Edit Scheme->RUN,

        Diagnostics ->Memory Management ->(勾选)Zombie Objects。(如下图:)

重运行,复现错误,此时系统定位了错误且在控制台输出了相应描述,是我自己的MineViewController这个界面 (如下图:)

再在这个页面找错误.(这里就按照自己的代码思维找了,没有捷径)

最后找到的错误是:没有释放KVO对象,KVO监听了“MineCarsStatus”, 没有在 dealloc 里释放掉:(如下图:)

最后在dealloc 里释放 MineCarsStatus 即可。

 

 

 

 

 

Thread 1exc_bad_access(code=1,address=0xffc)是一个常见的错误,通常出现在iOS开发中。这个错误表示程序试图访问一个已经被释放或无效的内存地址,导致程序崩溃。以下是一些可能的原因和解决方法: ### 可能的原因 1. **访问已释放的对象**: - 这种情况通常发生在对象被释放后,仍然有指针指向它,导致程序试图访问这个无效的内存地址。 2. **野指针**: - 野指针是指指向一个已释放或无效内存的指针。使用野指针会导致程序崩溃。 3. **内存管理问题**: - 在手动管理内存的情况下,忘记释放对象或多次释放同一个对象都会导致内存错误。 4. **循环引用**: - 对象之间的循环引用会导致内存无法被正确释放,从而引发内存错误。 ### 解决方法 1. **使用Xcode的Zombie Objects**: - 在Xcode中启用Zombie Objects可以帮助你检测访问已释放对象的情况。打开方法:Product -> Scheme -> Edit Scheme -> Run -> Diagnostics -> Enable Zombie Objects。 2. **使用Instruments工具**: - 使用Instruments中的Leaks和Allocations工具可以帮助你检测内存泄漏和野指针。 3. **避免循环引用**: - 使用弱引用(weak)或无主引用(unowned)来避免循环引用。 4. **检查内存管理**: - 确保每个对象的内存管理正确,避免内存泄漏和多次释放。 ### 示例代码 ```swift class Person { var name: String weak var partner: Person? // 使用弱引用避免循环引用 init(name: String) { self.name = name } deinit { print("\(name) is being deinitialized") } } var john: Person? = Person(name: "John") var jane: Person? = Person(name: "Jane") john?.partner = jane jane?.partner = john john = nil jane = nil ``` 在这个示例中,`partner`属性被声明为`weak`,从而避免了循环引用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值