我有一个用3.1.3构建的静态库。我将它包含在一个应用程序中,我用3.2 / 4.0b2构建它。
静态库包含一个UIViewController子类,它在-init中调用[super initWithNibName:nil bundle:nil]。
这个方法反过来调用_doCommonSetup,它破坏了子类的一个ivars:
0x003a68e9 <+0014> pop %ebx
0x003a68ea <+0015> mov 0x8(%ebp),%esi
0x003a68ed <+0018> movl $0x1,0x8(%esp)
0x003a68f5 <+0026> mov 0x1d98327(%ebx),%eax
0x003a68fb <+0032> mov %eax,0x4(%esp)
0x003a68ff <+0036> mov %esi,(%esp)
0x003a6902 <+0039> call 0x20e5f52 <dyld_stub_objc_msgSend>
0x003a6907 <+0044> movl $0x44898000,0x70(%esi) <- corrupting subclass's ivar (setting it to 0x4489..)
我可以在使用3.0或3.1.3构建的应用程序中使用静态库。但3.2和4.0会导致问题。
这应该可行,或者静态库是否只能在使用相同或较旧版本的SDK构建的应用程序中使用?
答案 0 :(得分:0)
这是因为4.0即使在模拟器上也使用现代运行时,而旧版本则没有。编译库不兼容。