background image

运行,按刚才的操作选中其中的

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 了。