gpt4 book ai didi

iphone - iOS SDK 中的 UIScrollView EXC_BAD_ACCESS 崩溃

转载 作者:行者123 更新时间:2023-12-03 18:14:07 25 4
gpt4 key购买 nike

我有一个 iPhone SDK 应用程序,其中有多个 View ,这些 View 会在用户创建内容时出现和消失。在设备上使用该应用程序一段时间后,我遇到以下崩溃:

Program received signal:  “EXC_BAD_ACCESS”.
(gdb) backtrace
#0 0x33369ebc in objc_msgSend ()
#1 0x320e5248 in -[UIScrollView(UIScrollViewInternal) _scrollViewAnimationEnded] ()
#2 0x338b4a14 in -[NSObject performSelector:withObject:] ()
#3 0x320e5098 in -[UIAnimator stopAnimation:] ()
#4 0x320e4b7c in -[UIAnimator(Static) _advance:] ()
#5 0x320e4a34 in LCDHeartbeatCallback ()
#6 0x34350e60 in HeartbeatVBLCallback ()
#7 0x332e91c0 in IOMobileFramebufferNotifyFunc ()
#8 0x316532f8 in ?? ()
#9 0x33866b50 in __CFMachPortPerform ()
#10 0x338ae52a in CFRunLoopRunSpecific ()
#11 0x338adc1e in CFRunLoopRunInMode ()
#12 0x3434e1c8 in GSEventRunModal ()
#13 0x32002c30 in -[UIApplication _run] ()
#14 0x32001230 in UIApplicationMain ()
#15 0x00002ff8 in main (argc=1, argv=0x2ffff550) at /Developer/svn/MyCompany/iPhone/MyApplication/Other Sources/main.m:14

正如您从跟踪中看到的,其中唯一提到我的代码是对 main 的调用。

我已经从 Xcode 运行了“构建”和“分析”,并将其设置为从终端在我的项目上运行 clang 分析器,这两种方法都找不到代码中的任何问题。我正在使用 iOS SDK 的最新版本(我还没有下载 4.1,但我使用的是 4.1 之前发布的版本)。

此外,我已经使用模拟器在 Instruments 中运行了该应用程序,并且该应用程序没有内存泄漏。

我准备尝试使用 NSZombieEnabled 变量,看看是否能找到任何东西,但问题是我需要使用该应用程序 30 到 40 分钟左右,然后才会崩溃,并且我怀疑 NSZombieEnabled 甚至可能无法帮助我找到问题。

我所看到的崩溃似乎是当模态视图调用父 View Controller 中的委托(delegate)时发生的。然后,父 View Controller 在关闭模态视图 Controller 之前进行一些处理。崩溃中引用了一些动画和 ScrollView ,但我不确定我可以做什么来导致这些问题出现。有人对要寻找的东西有什么建议吗?

编辑:我已将 NSZombieEnabled 标志放入应用程序中,并且在设备上,它会在控制台中显示以下消息:

2010-09-11 17:10:33.970 MyApplication[9321:207] *** 
-[MyViewController respondsToSelector:]: message
sent to deallocated instance 0x7489480

据我所知,我在所有类的释放中将应用程序中使用的委托(delegate)设置为 nil,因此我不知道下一步该往哪里看。

我尝试对此使用malloc_history pid地址命令,但它说找不到进程,我尝试了9321、9321:207和207。另外,如果我尝试使用 MallocStackLogging 变量,程序将无法在设备上运行,我在控制台中收到一堆 malloc: 无法创建堆栈日志目录消息,并且程序崩溃。

哦,顺便说一句,我无法使用僵尸检查仪器,因为它似乎不适用于设备,并且我无法在模拟器中发生相同的崩溃。

最佳答案

我自己刚刚解决了这个问题。

我遇到了一个问题:

  • ScrollView 委托(delegate)已连接到 UIViewController
  • ScrollView 开始动画
  • 委托(delegate)离开并调用了 dealloc。

问题是 ScrollView 委托(delegate)消息在新释放的对象上触发,并且崩溃日志有点困惑,因为它们指向无意义的对象引用。

解决方法是将 ScrollView 委托(delegate)设置为 nil,作为 View Controller dealloc 方法的第一行。

希望这对其他人有帮助!

关于iphone - iOS SDK 中的 UIScrollView EXC_BAD_ACCESS 崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3686803/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com