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

news/2024/7/20 13:40:47 标签: 内存管理, xcode

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

将红圈处从No 改成Yes

 

 

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

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

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

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

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

 

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

 

5.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”)

 

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

我们项目里可能引用了许多第三方框架。
大部分都是用一些宏来让代码可以同时适应arc和非arc的(用#if __has_feature(objc_arc)判断)。如果代码量不大,可以考虑自己进行改写
你可以按上面的步骤将第三方框架自己手动改称arc
 
如果是大型框架的话,可以采取标记此框架保留非arc的环境不变,继续使用。
1,选择项目中的Targets,选中你所要操作的Target,
2,选Build Phases,在其中Complie Sources中选择需要ARC的文件双击,并在输入框中输入:-fobjc-arc,如果不要ARC则输入:-fno-objc-arc
 

转载于:https://www.cnblogs.com/updateofsimon/p/4011975.html


http://www.niftyadmin.cn/n/936544.html

相关文章

springboot使用mybatis分页器

springboot使用mybatis分页器 1.导包 pom.xml <dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper-spring-boot-starter</artifactId><version>1.2.3</version></dependency> 2.配置applcation.…

无法在Web服务器上启动调试,已附加了一个调试器

运行环境&#xff1a;开发环境&#xff1a;Windows7旗舰版64bit、VisualStudio2008 With SP1、ArcEngine10.0、NetFrameWork4.0、IIS7和C#开发语言。 问题描述&#xff1a;ASP.NET调试时遇到的错误“无法在Web服务器上启动调试。已附加了一个调试器。 问题原因&#xff1a;我自…

无法识别的配置节 applicationSettings

在.NETFramework2.0中&#xff0c;如果发布的虚拟目录程序引用了外部的webservice访问接口&#xff0c;配置文件会出现下边的applicationSettings节点&#xff0c;如 但是访问应用程序时候&#xff0c;可能会出现这样的结果&#xff1a;无法识别的配置节 applicationSettings 这…

mybatis-plus+springboot的整合和使用

整合mybatis-plus 1.安装 Maven&#xff1a; <dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.4.3</version> </dependency> 2.配置 Spring Boot 工程&#x…

关于WPF中文件夹浏览对话框的方式

文件夹浏览时dialogresult要写全引用路径 1 string pathnull;2 FolderBrowserDialog fbd new FolderBrowserDialog();3 fbd.Description "请选择文件夹";4 if (fbd.ShowDialog()System.Windows.Forms.DialogResult.OK)5 …

封装的消息对象

import lombok.Data;import java.io.Serializable;Data public class Result implements Serializable {private int code; // 200是正常&#xff0c;非200表示异常private String msg;private Object data;//操作成功public static Result succ(Object data) {return succ(200…

nodeJS实战

github代码托管地址&#xff1a; https://github.com/Iwillknow/microblog.git 根据《NodeJS开发指南》实例进行实战{{%并且希望一步步自己能够逐步将这个博客系统一点点完善&#xff0c;我会在github上及时更新代码%}}。不得不提下的是&#xff0c;因为版本原因&#xff0c;只…

【android】Socket简单用法

2019独角兽企业重金招聘Python工程师标准>>> Socket通常也称做”套接字“&#xff0c;用于描述IP地址和端口&#xff0c;废话不多说&#xff0c;它就是网络通信过程中端点的抽象表示。值得一提的是&#xff0c;Java在包java.net中提供了两个类Socket和ServerSocket&…