Objective-c示例代码,故意向已释放的对象发送消息

Objective-c示例代码,故意向已释放的对象发送消息,第1张

概述我是 Objective-c和xcode的新手,我正在编写的应用程序正在收到臭名昭着的EXC_BAD_ACCESS错误. 几乎每个人都建议使用NSZombies开始解决问题.我想我有NSZombies正在工作,但xcode没有给我一个关于当我的应用程序崩溃时收到消息的僵尸的警报. 在继续我的调试之前,我想运行一些代码,这些代码肯定会导致消息被发送到僵尸(解除分配的对象). 什么是简单的代码片段,其 我是 Objective-c和xcode的新手,我正在编写的应用程序正在收到臭名昭着的EXC_BAD_ACCESS错误.

几乎每个人都建议使用NSZombIEs开始解决问题.我想我有NSZombIEs正在工作,但xcode没有给我一个关于当我的应用程序崩溃时收到消息的僵尸的警报.

在继续我的调试之前,我想运行一些代码,这些代码肯定会导致消息被发送到僵尸(解除分配的对象).

什么是简单的代码片段,其中消息被发送到解除分配的对象,导致NSZombIEs应该提醒我的情况?

解决方法 对于非ARC代码:

- (IBAction) messageZombIE:(ID)sender {    ID a = [[NSObject alloc]init];    [a release];    NSLog(@"%@",[a description]);}

这将为您提供关闭ZombIEs的EXC_BAD_ACCESS,以及启用ZombIEs的“发送到解除分配实例的消息”消息.

如果您的项目使用ARC,那么可靠地导致消息取消分配对象(毕竟这是ARC的重点)有点困难.

这有效:

- (IBAction) messageZombIE:(ID)sender {        ID a = [[NSObject alloc]init];    ID __unsafe_unretained b =a;    a=nil;    NSLog(@"%@",[b description]);}

它可能与你的实际代码所做的不太相似,因为无论如何,heck使用了__unsafe_unretained?但是如果你只是想确保你已经正确启用了NSZombIEs,这应该是一个合理的测试用例.

如果你在代码中寻找可疑的地方,那么一定要查找__unsafe_unretained指针,尽管你找不到任何*,并仔细检查右转换是否用于转换为Cocoa对象的CoreFoundation对象.

*如果您的项目需要支持10.7之前的OS X版本或5.0之前的iOS版本,那么您不能使用__weak指针,因此在这种项目中,您希望找到更频繁使用的__unsafe_unretained.

总结

以上是内存溢出为你收集整理的Objective-c示例代码,故意向已释放的对象发送消息全部内容,希望文章能够帮你解决Objective-c示例代码,故意向已释放的对象发送消息所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1016037.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-22
下一篇 2022-05-22

发表评论

登录后才能评论

评论列表(0条)

保存