运行,按刚才的操作选中其中的
cell。再次 crash,这次在 output 窗口会看到多了一项错误信
息:
2012-11-28 13:22:08.911 PropMemFun[2132:11303] *** -[CFString respondsToSelector:]:
message sent to deallocated instance 0x713ebc0
大概意思是:向已释放的内存发送消息。也就是说使用了已释放的内存,在
C 语言相当于
使用了
“野指针”
看了下
crash 的这个语句,sushiString 应该是没问题的,它是从 stringWithFormat 初始化出
来的。那就是
_lastSushiSelected 的问题。
_lastSushiSelected 指向了 sushiString,sushiString 是一个 autorelease 变量。 在第二次点击时,
使用的是
sushiString 已经被释放,所以 crash 了。那为_lastSushiSelected 保留一下,就可以
用了。代码修改如下:
1
<span style=
"font-size:14px;"
> _lastSushiSelected = [sushiString retain];
2
</span>
运行,这时候不崩溃。
3、分析内存泄露(shift+command+b)
app 不 crash 了,那看看有没有内存泄露。用 XCode 的 Analyze 就能分析到哪里有内存泄露
分析之后可以看到
:提示 alertView 没被释放,有内存泄露,那我们释放
[alertView release];
再分析,这个问题解决了。
4、使用 Instruments 的 leaks 工具
分析内存泄露不能把所有的内存泄露查出来,有的内存泄露是在运行时,用户操作时才产
生的。那就需要用到
Instruments 了。