我真的很困惑这个话题。我在Xcode上使用LLVM 4.1编译器,当我在32位或x64或x64-x86模式下编译一个简单的基本代码时,关闭ARC,一切正常
但如果我使用自动参考计数模式进行编译;我收到BAD_ACCESS
错误。
这是一个示例代码:
-(void) doNothing{
__asm__ volatile(
"pushl %ebp;"
"movl %esp , %ebp ;"
"movl %eax , -4(%ebp);"
"movl %ebp, %esp;"
"popl %ebp;"
"leave;"
"ret " // retl in x86
);
}
我试图找出错误的来源,我发现推/弹是唯一可以在ARC模式下工作的部分!
令人沮丧的是因为我已经在内联汇编中编写了一个巨大的代码,现在我必须将它与ARC的模块联合起来。现在,如果我无法解决它,我可能需要修改所有模块,以便在没有ARC的情况下工作!
任何人都可以帮助我吗?
答案 0 :(得分:2)
可能有一个解决方案,但如果您无法修复它,您可以将有问题的方法的实现移动到一个类别中,并使用-fno-objc-arc编译该类别。这样你的objc代码仍然是弧形的,你让汇编程序工作
答案 1 :(得分:2)
我建议尝试将汇编程序代码放在C或C ++函数中,而不是ObjC消息。并将__attribute__((naked))
添加到函数声明。
答案 2 :(得分:2)
您不能在OS X上以32位模式使用ARC。根据Objective-C Feature Availability Index,ARC在OS X上需要64系统。