最近在搞IOS版的HBuilder离线打包,需要增加一个功能插件。开发环境XCODE 8.3,从别人的代码里找到需要的功能,进行移植。但是在别的项目里正常的代码,移植到Hbuilder里sdk中做成插件。就使无法正常运行。总是遇到EXC_BAD_ACCESS这要的个别变量异常问题。进过两个星期的折腾,终于找到问题的所在。
问题出在工程设置->Build Settings->Apple LLVM 8.1 - Language - Objective C ->Objective-C Automatic Referece Counting->NO ,折腾的两个星期最后才一行一行的对着设置改了测试。直到打开这个开关后,正常运行了,我简直泪流满面啊。之后深入研究了这个开关的作用。这是IOS5新增加的全称叫 ARC(Automatic Reference Counting)。简单地说,就是代码中自动加入了retain/release,原先需要手动添加的用来处理内存管理的引用计数的代码可以自动地由编译器完成了。
XCODE4.3默认是关闭的。不知道XCODE多少版本后默认是开启的。所以新的代码大部分也直接使用了ARC机制。但是偏偏hbuilder离线包工程设置里是不使用ARC机制的。
知道原因就容易解决了。
为了不影响原来的hbuilder离线包的功能,造成其他的异常。我只针对我们新加的代码加入ARC设置。原来的不改变。
继续设置Objective-C Automatic Referece Counting=NO,找到Build Phases -> Compile Sources 里双击新加入的.m代码后面添加Compiler Flags标志
-fobjc-arc 这个选项。大概的意思是,针对这个文件加入ARC编译设置。其他的没有加因为Objective-C Automatic Referece Counting是关闭的,所以默认都没有加入ARC功能。至此可以继续进行下一步的开发了。
现在时间2017年7月,希望做IOS开发的朋友在修改别人的工程的时候如果遇到EXC_BAD_ACCESS 不妨先看看设置里面的Objective-C Automatic Referece Counting是否打开。看看是不是因为这里造成的。我只是个玩VC的老人。对IOS开发只是菜鸟级别的。因为没有人交流。在这个错误面前浪费的2周的时间。翻阅了很多百度文章。都tmd解决不了。加几个IOS开发的QQ群,人挺多。但是也没有回答。觉得必须写点东西。留给后人。呵呵