ios arc 和 非arc 之间的转换方法
ios 非arc项目(mrc)转换成 arc项目 关于rest api和xml解析的技术细节就暂时先忽略吧..整个程序都是用mrc来进行内存管理的,首先来让我们把这个demo转成arc吧。基本上转换为arc意味着把所有的retain,release和a torelease关键字去掉,在之前我们明确几件事情: xcode提供了一个arc自动转换工具,可以帮助你将源码转为arc 当然你也可以自己动手完成arc转换 同时你也可以指定对于某些你不想转换的代码禁用arc,这对于很多庞大复杂的还没有转至arc的第三方库帮助很大,因为不是你写的代码你想动手修改的话代码超级容易mess... 另附: 1,选择项目中的targets,选中你所要操作的target, 2,选b ild phases,在其中complie so rces中选择需要arc的文件双击, 并在需要设置自动释放的类后面输入框中输入:-fobjc-arc,如果不要arc则输入:-fno-objc-arc 对于我们的demo,为了说明问题,这三种策略我们都将采用,注意这仅仅只是为了展示如何转换。实际操作中不需要这么麻烦,而且今后的绝大部分情况应该是从工程建立开始就是arc的。 选择llvm compiler 3.0 首先,arc是llvm3.0编译器的特性,而老的工程特别是xcode3时代的工程的默认编译器很可能是gcc或者llvm-gcc,因此第一步就是确认编译器是否正确。在project设置面板,选择target,在b ild settings中将compiler for ccobjective-c选为apple llvm compiler 3.0或以上。为了确保之后转换的顺利,在这里我个人建议最好把treat warnings as errors和 r n static analyzer都打开,确保在改变编译器后代码依旧没有警告或者内存问题(虽然静态分析可能不太能保证这一点,但是聊胜于无)。好了~clean(shift+cmd+k)以后b lid一下试试看,经过修改后的demo工程没有任何警告和错误,这是很好的开始。(对于存在警告的代码,这里是很好的修复的时机..请在转换前确保原来的代码没有内存问题)。 打开arc 接下来就是完成从mrc到arc的伟大转换了。还是在b ild settings页面,把objective-c a tomatic reference co nting改成yes(如果找不到的话请看一看搜索栏前面的小标签是不是调成all了..这个选项在basic里是不出现的),这样我们的工程就将在所有源代码中启用arc了。然后...试着编译一下看看,嗯..无数的错误。 请耐心聆听编译器的倾诉,因为很多时候它是你唯一的伙伴 这是很正常的,因为arc里不允许出现retain,release之类的,而mrc的代码这些是肯定会有的东西。我们可以手动一个一个对应地去修复这些错误,但是这很麻烦。xcode为我们提供了一个自动转换工具,可以帮助重写源代码,简单来说就是去掉多余的语句并且重写一些property关键字。 使用xcode自带的转换arc工具 选择要转换的文件 这个小工具是edit-refactor下的convert to objective-c arc,点击后会让我们选择要转换哪几个文件,在这里为了说明除了自动转换外的方法,我们不全部转换,而只是选取其中几个转换(mainviewcontroller.m和afhttpreq estoperation.m不做转换,之后我们再手动将这两个转为arc)。注意到这个对话框上有个警告标志告诉我们target已经是arc了,这是由于之前我们在b ild settings里已经设置了启用arc,其实直接在这里做转换后xcode会自动帮我们开启arc。点击检查后,xcode告诉我们一个不幸的消息,不能转换,需要修复arc readiness iss es..后面还告诉我们要看到所有的所谓的arc readiness iss es,可以到设置的general里把contin e b ilding after errors勾上...好吧~先乖乖听从xcode的建议"cmd+,"然后contin e b ilding after errors打勾然后再b ild。