iOS- 如何将非ARC的项目转换成ARC项目(实战)

1.前言  

因为公司有个国外餐饮系统,编程开发了3-4年,之前用的都是非ARC,开发到今年,第一批迭代开发的人员早已不见,目前发现了有许多的内存泄露之类的,系统没有自动释放该释放的内存。一旦app长时间使用,内存没有得到释放,最后导致app闪崩。涉及到的地方特别多,特别繁杂。故我有了打算将此项目完全转换称arc项目的意向。经过1个星期的转换与1个星期的测试,成功将非arc项目转换称arc项目。

因为很少找到有公司将大型老app进行arc转换,所以网上这方面的资料都特别少。

经过这次尝试,我证明了是可行的。

现在就在博客里总结一下我遇到的一些问题。

毕竟ARC是objc未来。

Xcode 自带一个自动转换的功能,不过只适合比较小的项目,在大型项目上是不适合适用的,所以我这里是全手动转换。

2.将项目编译环境改成arc   

将红圈处从No 改成Yes

如果你现在的工程不支持ARC技术,你可以通过一个自动转换工具来转换你的工程(工具在Edit>Refactor>Convertto Objective-C ARC),这个工具会自动所有工程中手动管理内存的点转换成合适自动方式的(比如移除retain, release等)。这个工具会转换工程中所有的文件。当然你可以转换单个文件。

3.下面的这些函数:dealloc,retain, release, retainCount, autorelease。禁止任何形式调用和实现(dealloc可能会被实现)  

将这些内存管理的东西全部删掉或注释

4.不能使用NSAutoreleasePool.可以考虑直接注释  

作为替代,@autoreleasepool被引入,你可以使用这个效率更高的关键词。

5.在做桥接转换时报错,用xcode提示替换  

6.ARC语法的一些规则

6.1.代码中不能使用retain, release, retain, autorelease

6.2.不重载dealloc(如果是释放对象内存以外的处理,是可以重载该函数的,但是不能调用[super dealloc])

6.3.不能使用NSAllocateObject, NSDeallocateObject

6.4.不能在C结构体中使用对象指针

6.5.id与void *间的如果cast时需要用特定的方法(__bridge关键字)

6.6.不能使用NSAutoReleasePool、而需要@autoreleasepool块

6.7.不能使用“new”开始的属性名称 (如果使用会有下面的编译错误”Property’s synthesized getter follows Cocoa naming convention for returning ‘owned’ objects”)

7.第三方包的问题,第三方框架的问题

我们项目里可能引用了许多第三方框架。

大部分都是用一些宏来让代码可以同时适应arc和非arc的(用#if __has_feature(objc_arc)判断)。如果代码量不大,可以考虑自己进行改写

你可以按上面的步骤将第三方框架自己手动改称arc

如果是大型框架的话,可以采取标记此框架保留非arc的环境不变,继续使用。

1,选择项目中的Targets,选中你所要操作的Target,
2,选Build Phases,在其中Complie Sources中选择需要ARC的文件双击,并在输入框中输入:-fobjc-arc,如果不要ARC则输入:-fno-objc-arc

作者: 清澈Saup
出处:http://www.cnblogs.com/qingche/
本文版权归作者和博客园共有,欢迎转载,但必须保留此段声明,且在文章页面明显位置给出原文连接。

时间: 2024-10-29 02:32:14

iOS- 如何将非ARC的项目转换成ARC项目(实战)的相关文章

转:如何将 Java 项目转换成 Maven 项目

如何将 Java 项目转换成 Maven 项目 本文内容 Java 项目 Maven 项目 Java 项目转换成 Maven 项目 本文主要介绍如何将 Java 项目转换成 Maven 项目.首先要明确的是,用 Maven 管理 Java 项目的确方便.它带给你直观的方便是:你不用在网上找 Jar 包,然后把它复制到 lib 目录,再在项目中引用它.而只需向 pom.xml 写入你需要的 Jar 包依赖,Maven 就能自动从本地仓库或远程仓库下载,并引用-- 如何将一般的 Java 项目转换成

Myeclipse Java项目转换成Maven项目

1.在Eclipse中Java项目转换成Maven项目可以在项目右键-->configure-->Convert Plug-in projects..  就可以.而在myeclipse中项目右键时configure标签不是默认的  需要手动开启. 2.开启configure过程为...   Window-->perferences. 3. 4. 5.然后项目右键-->configure-->Convert Plug-in projects..  就转换成maven项目了. 6

将Eclipse项目转换成AndroidStudio项目过程中遇到的问题以及解决方法

将Eclipse项目转换成AndroidStudio项目也不是第一次了,昨天转的时候遇到几个问题: 首先将项目导入androidstudio,导完后报错: 问题一: Error:java.util.concurrent.ExecutionException: com.android.ide.common.process.ProcessException: Error:Execution failed for task ':app:mergeDebugResources'.> Error: jav

Maven 学习笔记——将普通的Java项目转换成Maven项目(3)

将一个普通的java项目转换成Maven项目并不是一个很大的任务,仅仅只需要下面的几步就能将转换成功.下面我是用一个简单的Selenium测试小demon作为例子来说的. 移调项目中所有关联的Libraries 将Selenium项目转换成Maven项目 增加Maven依赖库到项目中 创建Maven的测试文件夹架构 Step1:移调项目中所有关联的Libraries 选中你需要转换的Project:Build Path > Configure Build Path Step2: 将Seleniu

Java 项目转换成 Maven 项目

本文内容 Java 项目 Maven 项目 Java 项目转换成 Maven 项目 本文主要介绍将 Java 项目转换成 Maven 项目.如果了解 Java 项目与 Maven 项目在结构上的区别,就很容易在他们之间进行转换,而不用局限于各种资料上所描述的方法(有些方法相当不靠谱,照猫画虎,知其然不知其所以然).本文假设你已经成功安装了 Maven. 我的 Eclipse 版本是 Eclipse eclipse-jee-mars-R-win32-x86_64 版本 4.5.0,Build id

非ARC项目转换成ARC项目的相关支持

1.将项目编译环境改成arc 将红圈处从No 改成Yes 如果你现在的工程不支持ARC技术,你可以通过一个自动转换工具来转换你的工程(工具在Edit>Refactor>Convertto Objective-C ARC),这个工具会自动所有工程中手动管理内存的点转换成合适自动方式的(比如移除retain, release等).这个工具会转换工程中所有的文件.当然你可以转换单个文件. 2.下面的这些函数:dealloc,retain, release, retainCount, autorele

如何将非ARC的项目转换成ARC

Xcode 自带一个自动转换的功能,不过只适合比较小的项目,在大型项目上是不适合适用的,所以我这里是全手动转换. 1.将项目编译环境改成ARC 将红圈处从No 改成Yes 如果你现在的工程不支持ARC技术,你可以通过一个自动转换工具来转换你的工程(工具在 Edit>Refactor>Convertto Objective-CARC),这个工具会自动所有工程中手动管理内存的点转换成合适自动方式的(比如移除retain, release等).这个工具会转换工程中所有的文件.当然你可以转换单个文件.

Eclipse中将Java项目转换成Web项目的方法

前言: 用Eclipse开发项目的时候,把一个Web项目导入到Eclipse里会变成了一个java工程,将无法在Tomcat中进行部署运行. 方法: 1.找到.project文件,找到里面的<natures>标签,查看是否有下面的代码,没有则复制进去. Xml代码 <nature>org.eclipse.wst.common.project.facet.core.nature</nature> <nature>org.eclipse.wst.common.m

idea中将项目转换成Maven项目

第一步:项目右键->Add Framework... 选择maven ok 这样就成功转换成了一个maven项目 原文地址:https://www.cnblogs.com/weibanggang/p/9652268.html