gpt4 book ai didi

iphone内存管理奇怪的问题

转载 作者:太空狗 更新时间:2023-10-30 04:01:38 26 4
gpt4 key购买 nike

这是我用xcode写的一段代码

Foo * myFoo = [[Foo alloc] init] ;

[myFoo release] ;
[myFoo printMessage] ;

如果我是对的,当调用 printmessage 函数时应该给出一个运行时错误,因为 myFoo 到那时被释放了。但是在 xcode 中,代码正在运行并且正在调用打印消息,这是由于 xcode 上的设置导致的问题吗?

问候阿比 git

最佳答案

您正在通过访问释放的内存来调用未定义的行为。

它可能会崩溃,可能会正常工作,也可能会导致跳舞的 unicorn 从你的 Nose 里喷出。

要在开发代码时检测内存错误,您应该启用 NSZombie,请参阅此处的说明:

http://www.cocoadev.com/index.pl?NSZombieEnabled

更新

您可能想知道为什么它会这样工作 - 当您尝试访问无效内存时,操作系统应该总是抛出错误吗?

您不会总是收到错误(以及行为未定义的原因)的原因是在每次访问时检查内存是否有效会导致性能下降 - 即。代码会运行得更慢,只是为了检查不应该发生的事情。

因此,您必须在开发过程中小心捕获所有这些错误,以免它们发生在最终用户身上。 NSZombies 是寻找它们的最佳工具。

还有一点 - 如果您在 xcode 中进行“构建和分析”,它也可能在构建时发现此错误。当然,静态分析器会在构建时检测到一些内存错误。

关于iphone内存管理奇怪的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3803597/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com