微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在Objective C中的ARC下手动释放对象NSString / NSMutableString,..

如何解决如何在Objective C中的ARC下手动释放对象NSString / NSMutableString,..

初始化一个对象 (Nsstring / NSMutableArray) 并为其设置值。我需要解除分配对象,然后必须为该对象分配一个值以获取已被解除分配的错误

手动尝试产生以下错误 EXC_BAD_ACCESS_KERN_INVALID_ADDRESS 0x00-012cbb4bb0.
EXC_BAD_ACCESS_KERN_INVALID_ADDRESS 0x00-020。

解决方法

您的要求很简单,但可能对您没有帮助。

__unsafe_unretained NSArray *array = [[NSArray alloc] initWithObjects:@"test",nil];
// Accessing `array` at this point will crash

在这里创建一个非空的 NSArray 很重要。空的 NSArrays 引用一个不能被释放的单例对象。同样,不要使用数组字面量 @[...],因为它们直接存储在二进制文件中并且也不能被释放。 NSString 也有类似的情况。

也就是说,这不太可能是追踪您所描述的错误的好方法。首先确保您的代码中没有警告。然后运行静态分析器。检查崩溃报告(希望它会给你一个提示涉及哪些类)。然后仔细检查您认为发生故障的东西的用法(在程序中搜索它的用法;寻找诸如 __unsafe_unreatinedassign 之类的东西)。然后打开NSZombie(搜索一下,使用教程很多)。

此外,您可能需要探索任何 C/C++ 代码,这些代码也可能导致此异常。如果您通过不安全的线程破坏了内存,您可能会收到此异常。异常只是告诉您您正在尝试访问无效的指针,这可能来自很多方面。过度释放 ObjC 对象是一个常见原因,但不是唯一原因。

,

访问未分配的内存是未定义的行为。未定义的行为意味着它不能保证崩溃,或做任何特定的事情。在一种情况下它可能会崩溃,而在另一种情况下则不会。你不能依赖它做任何事情。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。