静态lib 3.1.3 + App 3.2 / 4.0b2:initWithNibName:bundle:corrupting ivar

时间:2010-04-28 11:23:47

标签: iphone objective-c

我有一个用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构建的应用程序中使用?

1 个答案:

答案 0 :(得分:0)

这是因为4.0即使在模拟器上也使用现代运行时,而旧版本则没有。编译库不兼容。

相关问题