我有一个相当大的应用程序,它在模拟器中工作,但在 iPhone 设备上的过度发布对象场景中创建。NSzombies 似乎是要走的路线,除了该对象在模拟器上没有过度释放并且 NSZombies 在设备上不起作用。通过数小时的日志记录,我似乎能够将它固定在我跑步之间的某个地方 -
[locManager startUpdatingLocation] 和开始 -
(void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation
这就解释了为什么它可以在模拟器上运行,我没有检测到定位能力并且不运行该定位代码。
当我在 [locManager startUpdatingLocation] 之前和之后在线 NSLog 时,我的 NSString 对象被分配并存在。但是当应用程序执行并点击 locationManager: NSLog 显示 NSString 已被释放,消失了。这个字符串对象与位置处理或功能完全无关。不相关的 NSString。我已经注释掉了所有其他潜在的活动,并注释掉了所有明确的发布代码,但找不到它发生的那一刻。
我更沮丧的是 lldb 似乎不支持观察点而 gdb 支持它们,但这个版本似乎它们不起作用!gdb 将设置一个硬件观察点,然后 Xcode 说它正在运行,但 30 分钟后仍然没有视觉活动或中断。
我在 Lion、Xcode 4.1.1 和太多的咖啡上。
我应该采取什么方法在如此狭窄的活动范围和有限的工具中找到这个已发布的 NSString 对象?