【发布时间】:2011-10-22 20:50:06
【问题描述】:
我有一个相当大的应用程序,它在模拟器中工作,但在 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 对象?
【问题讨论】:
-
CoreLocation 模拟器可以让你在 iPhone 模拟器上使用 CL。您也许可以通过这种方式在 iPhone 模拟器上复制该问题。请参阅 SO 上的testing-corelocation-on-iphone-simulator。
标签: iphone ios gdb watchpoint xcode4.1