自从ARC首次宣布它是一个编译时的东西并且将向后兼容iOS 4以来,我已经阅读和听过.我已经使用Xcode 4.2的自动重构成功地将我的项目重构为ARC,并且在编译时iOS 5.0 SDK,它运行正常.但是,如果我尝试针对我的iOS 4.2 SDK进行编译,则会在链接时失败,缺少以下符号:
我查了一下,这些符号出现在5.0但不是4.2中:
iPhoneOS5.0.sdk/usr/lib $ find . -type f|xargs nm|grep -i _objc_retain$
00005ed0 T _objc_retain
000061d0 T _objc_retain
iPhoneOS4.2.sdk/usr/lib $ find . -type f|xargs nm|grep -i _objc_retain$
[... *crickets* ...]
Run Code Online (Sandbox Code Playgroud)
这是否意味着苹果撒谎?相反,我认为我很困惑,做错了什么,但我无法弄清楚是什么.
这是Xcode 4.2(Build 4C199)的GM版本
在Xcode 4.x中,我已经将我的Run方案编辑为'Enable Guard Malloc',因为我有一个我需要跟踪的非描述性malloc错误.我知道我需要在模拟器中运行才能使用此功能.但是,当我这样做时,应用程序立即冻结,Xcode向我显示一个堆栈跟踪,如下所示:

我已经用Google搜索了解决方案,但到目前为止还没有任何乐趣.据我所知,我应该在我的方案中设置一个环境变量:
DYLD_INSERT_LIBRARIES -> /usr/lib/libgmalloc.dylib
Run Code Online (Sandbox Code Playgroud)
然而,这并没有解决问题.我也试过'lsystem'作为值,但这也没有用.
任何人都可以建议解决这个dylib问题,或者推荐一个替代'Enable Guard Malloc'来识别malloc'd堆区域被超出的位置?
UPDATE
为了澄清,这是我正在处理的错误类型:
malloc: *** error for object 0x2b4b54: incorrect checksum for freed object - object was probably modified after being freed.
*** set a breakpoint in malloc_error_break to debug
Run Code Online (Sandbox Code Playgroud)
我已经尝试设置一个符号断点malloc_error_break,但它仍然在内存问题上"随机"断开,而不是超出分配区域.
我正在开发一个在模拟器4.3上工作正常的应用程序,但是当我在模拟器5.0上尝试它时,它甚至在到达main方法之前崩溃了.我没有信息,只有gdb可用,但我可以问他的少数人无处可去.
这是来自的堆栈跟踪gdb:
#0 0x00000000 in ?? ()
#1 0x95392ef3 in mig_get_reply_port ()
#2 0x9538c70c in mach_ports_lookup ()
#3 0x02845124 in _xpc_domain_init_local ()
#4 0x02842eb1 in _libxpc_initializer ()
#5 0x8fe7c15b in __dyld__ZN16ImageLoaderMachO18doModInitFunctionsERKN11ImageLoader11LinkContextE ()
#6 0x8fe7bcc0 in __dyld__ZN16ImageLoaderMachO16doInitializationERKN11ImageLoader11LinkContextE ()
#7 0x8fe79220 in __dyld__ZN11ImageLoader23recursiveInitializationERKNS_11LinkContextEjRNS_21InitializerTimingListE ()
#8 0x8fe791b6 in __dyld__ZN11ImageLoader23recursiveInitializationERKNS_11LinkContextEjRNS_21InitializerTimingListE ()
#9 0x8fe791b6 in __dyld__ZN11ImageLoader23recursiveInitializationERKNS_11LinkContextEjRNS_21InitializerTimingListE ()
#10 0x8fe791b6 in __dyld__ZN11ImageLoader23recursiveInitializationERKNS_11LinkContextEjRNS_21InitializerTimingListE ()
#11 0x8fe791b6 in __dyld__ZN11ImageLoader23recursiveInitializationERKNS_11LinkContextEjRNS_21InitializerTimingListE ()
#12 0x8fe7a1c0 in __dyld__ZN11ImageLoader15runInitializersERKNS_11LinkContextERNS_21InitializerTimingListE ()
#13 0x8fe6e656 in __dyld__ZN4dyld24initializeMainExecutableEv () …Run Code Online (Sandbox Code Playgroud)