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/
本文版权归作者和博客园共有,欢迎转载,但必须保留此段声明,且在文章页面明显位置给出原文连接。 

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

  1. 把Eclipse项目转换成Maven项目

    把Maven项目转换成Eclipse项目只要使用Maven的Eclipse插件就能做到 mvn eclipse:eclipse 其实Maven的Eclipse插件也有把Eclipse项目转换成Mave ...

  2. Myeclipse Java项目转换成Maven项目

    1.在Eclipse中Java项目转换成Maven项目可以在项目右键-->configure-->Convert Plug-in projects..  就可以.而在myeclipse中项 ...

  3. 如何将 Java 项目转换成 Maven 项目

    本文内容 Java 项目 Maven 项目 Java 项目转换成 Maven 项目 本文主要介绍如何将 Java 项目转换成 Maven 项目.首先要明确的是,用 Maven 管理 Java 项目的确 ...

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

    将一个普通的java项目转换成Maven项目并不是一个很大的任务,仅仅只需要下面的几步就能将转换成功.下面我是用一个简单的Selenium测试小demon作为例子来说的. 移调项目中所有关联的Libr ...

  5. 使用cmd命令创建maven(web)项目+项目转换成IDEA项目+项目打包+Jetty运行Web项目

    3条件:配置好环境 配置环境教程:https://www.cnblogs.com/weibanggang/p/9623705.html 第一步:查看版本信息,在cmd输入mvn –version,如果 ...

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

    如何将 Java 项目转换成 Maven 项目 本文内容 Java 项目 Maven 项目 Java 项目转换成 Maven 项目 本文主要介绍如何将 Java 项目转换成 Maven 项目.首先要明 ...

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

    将Eclipse项目转换成AndroidStudio项目也不是第一次了,昨天转的时候遇到几个问题: 首先将项目导入androidstudio,导完后报错: 问题一: Error:java.util.c ...

  8. Java项目转换成Web项目

    阐述:有时候我们在Eclipse中导入一个web项目,发现导入到项目中后变成一个Java项目,这让人很蛋疼.本篇主要讲述怎样将这个本该为web项目的Java项目变身回去,以及一些在导入过程中遇到的一些 ...

  9. 将java项目转换成javaWeb项目

    1.Ctrl+Shift+R快捷键:找到此项目中的.project文件,打开修改文件内容 在<natures> </natures>代码标签中,添加些内容: <natur ...

随机推荐

  1. Elasticsearch 索引操作

    一.创建 语法: PUT /索引库名称 { "settings": { "number_of_shards": 分片数量, "number_of_re ...

  2. Git命令中日常不注意又很重要的坑

    引言   简单聊一下Git的常用命令和概念,其中很多命令开发者在使用时用法不当导致出现很多问题:   比如,新创建的分支没有追踪想要追踪的分支,很想看到版本提交的内容   以下是觉得比较好用并且完整的 ...

  3. spark sql cache时发现的空字符串问题

    博客园首发,转帖请注明地址:https://www.cnblogs.com/tzxxh/p/10267202.html 图一 图1未做cache,直接过滤expression列的 null 和空字符串 ...

  4. 数据库 MySQL part3

    外键约束 如果表A的主关键字是表B中的字段,则该字段称为表B的外键,表A称为主表,表B称为从表. 外键是用来实现参照完整性的,不同的外键约束方式将可以使两张表紧密的结合起来,特别是修改或者删除的级联操 ...

  5. APP支付 + 退款(JAVA实现)

    首先,你得先有微信开发平台账号密码还需要开通应用,然后还有微信服务商平台商户版账号(这些我都是给产品经理拿的) 其次我认为你先去看一看微信开发平台的文档!  https://pay.weixin.qq ...

  6. 北京Uber优步司机奖励政策(12月10日)

    滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...

  7. LeetCode: 53. Maximum Subarray(Easy)

    1. 原题链接 https://leetcode.com/problems/maximum-subarray/discuss/ 2. 题目要求 给定一个整型数组,返回其子串之和的最大值 例如,[-2, ...

  8. mysql题目练习的答案

    rianley 博客 盗版必究!基于上一个sql练习的答案:该答案是我所写!如果有错误或者用法不当之处:请下方评论指出:感激不尽!谢谢各位码友! <!--1.查询所有的课程的名称以及对应的任课老 ...

  9. letsencrypt证书-使用certbot申请wildcard证书

    目录 1. certbot安装 2. 认证方式 3. 运行命令 4. 更新 1:下载 2:配置 3:申请证书 4:续期证书 1. certbot安装 cd /usr/local/src wget ht ...

  10. MAC 更新brew 镜像源

    mac 更新brew镜像源 cd "$(brew --repo)/Library/Taps/homebrew/homebrew-core" git remote set-url o ...