abh*_*jit 4 iphone objective-c nszombie
这是我用xcode编写的一段代码
Foo * myFoo = [[Foo alloc] init] ;
[myFoo release] ;
[myFoo printMessage] ;
Run Code Online (Sandbox Code Playgroud)
如果我是对的,那么当调用printmessage函数时它应该给出运行时错误,因为myFoo在那时被释放.但是在xcode中,代码正在运行并且打印消息被调用,是否因为设置xcode而出现问题?
关心阿比吉特
您通过访问释放的内存来调用未定义的行为.
它可能会崩溃,它可能会正常工作,它可能会导致从你的鼻子喷出的独角兽.
要在开发代码时检测内存错误,您应该启用NSZombie,请参阅此处的说明:
http://www.cocoadev.com/index.pl?NSZombieEnabled
更新
您可能想知道它为什么会这样工作 - 当您尝试访问无效的内存时,操作系统应该总是抛出错误?
您不总是得到错误(以及为什么行为未定义)的原因是在每次访问时检查内存是否有效会导致性能损失 - 即.代码会运行得更慢,只是为了检查一些不应该发生的事情.
因此,您必须小心在开发期间捕获所有这些错误,以便它们永远不会发生在最终用户身上.NSZombies是找到它们的最佳工具.
另一点 - 如果你在xcode中进行"构建和分析",它也可能在构建时发现此错误.当然静态分析器会在构建时检测到一些内存错误.
| 归档时间: |
|
| 查看次数: |
74 次 |
| 最近记录: |