我的代码使用5.1的基本SDK和4.0的部署构建,并使用ARC构建。
我以前在4.3测试设备上运行它时没有遇到任何问题,但它刚刚第一次崩溃。
知道怎么解决吗?
Exception Type: EXC_BREAKPOINT (SIGTRAP)
Exception Codes: 0x00000001, 0xe7ffdefe
Crashed Thread: 0
Dyld Error Message:
Symbol not found: _objc_retainAutoreleasedReturnValue
Referenced from: /var/mobile/Applications/6AD37C1A-9642-4F0A-87E9-ED33EE45729D/Interactive Messages.app/Interactive Messages
Expected in: /usr/lib/libobjc.A.dylib
Dyld Version: 191.3
Thread 0 name: Dispatch queue: com.apple.main-thread
Thread 0 Crashed:
0 dyld 0x2fe01080 dyld_fatal_error + 0
1 dyld 0x2fe02a40 dyld::halt(char const*) + 48
2 dyld 0x2fe02b00 dyld::fastBindLazySymbol(ImageLoader**, unsigned long) + 172
3 libdyld.dylib 0x351d544e _dyld_fast_stub_entry(void*, long) + 30
4 libdyld.dylib 0x351d5374 dyld_stub_binder + 12
5 Interactive Messages 0x00036aee 0x1000 + 219886
6 libobjc.A.dylib 0x350af5d4 call_load_methods + 96
7 libobjc.A.dylib 0x350af446 load_images + 50
8 dyld 0x2fe03d7c _ZN4dyldL12notifySingleE17dyld_image_statesPK11ImageLoader + 64
9 dyld 0x2fe0a6a8 ImageLoader::recursiveInitialization(ImageLoader::LinkContext const&, unsigned int, ImageLoader::InitializerTimingList&) + 236
10 dyld 0x2fe0aaaa ImageLoader::runInitializers(ImageLoader::LinkContext const&, ImageLoader::InitializerTimingList&) + 34
11 dyld 0x2fe020dc dyld::initializeMainExecutable() + 324
12 dyld 0x2fe06ffe dyld::_main(macho_header const*, unsigned long, int, char const**, char const**, char const**) + 1446
13 dyld 0x2fe01286 dyldbootstrap::start(macho_header const*, int, char const**, long, macho_header const*) + 506
14 dyld 0x2fe01058 _dyld_start + 48
答案 0 :(得分:1)
崩溃发生在哪里?我有同样的事情突然开始发生新的编译器。
对我来说,我有一个+(void) load
覆盖内的代码,它似乎是在arclite代码正确链接之前被调用的。我不确定这是否可行,但将相同的代码移到+(void) initialize
中工作正常。
答案 1 :(得分:0)
[这个用来说4.3但是我错了,所有文档都说它是iOS 4。]
编辑:Grrr - 我一年前开始我的项目,并希望使用ARC和块。当时我有充分的理由使用4.3而不是旧的版本,必须得到管理层的许可,从那时起它一帆风顺。现在,我无法确定为什么这样做。有可能在那时,SDK是4.3,我做出了我需要的假设。我强烈回想起我有充分的理由要求4.3(我刚刚从WWDC回来),但现在我找不到任何证据来证实我的答案。也就是说,原始海报似乎给了我这个答案 - 所以假设改为4.3修复他的运行时间问题。如果我找到原因,我会更新这个答案。答案 2 :(得分:0)
我同意@Paul de Lange,并让我补充说明。
我不是100%肯定,但似乎运行时机制已经存在 自Xcode 4.4以来略有改变,启用ARC的项目将开始链接libarclite_xxx.a(对于iOS4)AFTER类的+(void)加载被调用(之前,它是BEFORE)。
更详细地说,方法调用在Xcode< = 4.3:
中是这样的并在Xcode> = 4.4:
由于添加了@autoreleasepool,我的应用程序在首次启动时崩溃了 直接在类的+ load中,并通过将其实现移动到 无论是类的初始化还是类类的+加载,一切都很好。