arc 的配置使用

ios iphone arc 配置 it

项目中以前的一个复杂的想shi的类,今天leak测试的时候,发现收到内存警告,索性直接改为arc了

(arc是iOS 5推出的新功能,那些概念性的话就不多说了).

发个小帖,仅供新手看~

旧工程配置arc方案:

1,直接在targets->build phases中修改compiler Flags,是否支持arc。添加:-fobjc-arc,就可以让旧项目支持arc。如果想让原来支持arc的不使用arc则添加-fno-objc-arc

2,因为在build phases中可以改变是否支持arc,所以应该在代码中添加判断是否支持arc,这样不管以后.m的arc是否改变,都不用再次调整代码。

 

下面是一个.h文件(附件中也上传了.h),整合了arc的各种属性、release判断,直接#import在你想使用arc的类中即可。

#ifndef paixiu_PXISARC_h

#define paixiu_PXISARC_h

#ifndef PX_STRONG

#if __has_feature(objc_arc)

#define PX_STRONG strong

#else

#define PX_STRONG retain

#endif

#endif

#ifndef PX_WEAK

#if __has_feature(objc_arc_weak)

#define PX_WEAK weak

#elif __has_feature(objc_arc)

#define PX_WEAK unsafe_unretained

#else

#define PX_WEAK assign

#endif

#endif

#if __has_feature(objc_arc)

#define PX_AUTORELEASE(expression) expression

#define PX_RELEASE(expression) expression

#define PX_RETAIN(expression) expression

#else

#define PX_AUTORELEASE(expression) [expression autorelease]

#define PX_RELEASE(expression) [expression release]

#define PX_RETAIN(expression) [expression retain]

#endif

#endif

说明:在arc中,strong对应原来的retain与copy,weak对应原来的assign。

EX:举例使用autorelease:

NSArray *testArray = PX_AUTORELEASE([[NSArray alloc] init]);

 //如果支持arc,testArray就只是alloc init,release的事情由系统来做。

//如果不支持arc,那这条语句相当于:

NSArray *testArray = [[[NSArray alloc] init] autorelease];

这样不管以后改不改arc,都不会内存泄漏了 .

所以,arc的使用有两点:

A:在build phases中修改compiler Flags值。

B:在代码中判断是否支持arc,包括对属性(property)、释放(release)的判断。

3,在dealloc中需要这样做:

类如果注册了通知(观察者模式),需要remove掉。这个不管是否支持arc,都必须要做的。

- (void)dealloc {

[[NSNotificationCenterdefaultCenter] removeObserver:self];//如果注册了通知的话。

[self removeObserver:self forKeyPath:keyPath];//如果注册了kvo的话。

#if !__has_feature(objc_arc)  //在这里也需要判断是否支持arc,支持的话就执行旧工程中该release的语句.

    [array release]; //array代表alloc但没有autorelease的变量

    [super dealloc];

#endif

}

4,另外加点block的判断,这个是在4.0以后有的,当然也可以不进行判断,因为现在大多数都4.0以后了。

#if NS_BLOCKS_AVAILABLE

#endif

 

总结:

1,arc的设置是在build phases中修改compiler Flags的值。

2,如果使用了arc,在你的代码中不可以使用retain, release, autorelease,如果使用的话会报错。

3,如果使用了arc,在@property声明中,用strong和weak代替相应的retain, copy,和assign。

4,如果使用了arc,NSAutoReleasePool也不能使用,测试发现,用@autoreleasepool 代替,不会编译报错。

 

总之,一切你之前“背过”的那几条内存管理规则,你都不用去管了。而且,个人感觉,用arc代码清晰很多,而且效率也提高了些。

相关推荐

  • fckeditor/ckeditor php使用配置 fckeditor使用配置:下载地址:http://www.fckeditor.net/download效果演示:http://www.fckeditor.net/demo一:修改文件上传语言为PHP打开fckconfig.js找到:var
  • spring使用@配置bean java类使用@Component("testSoapAnni")来标注该类需要自动注入。类代码如下:packagesoapanni.impl;importorg.springframework.context.annotation.Sco
  • ubuntu7.04使用配置过程 一:升级打开终端命令,输入(如图)回车,出现一个编辑器,将编辑器中的内容全部选择删除,然后输入源(自己google一下,如果电信用户,使用江苏电信源,如果是网通用户,可以使用台湾的源,我则输入的是江苏电信,如图:)输入后,按菜单中的"sav
  • vi风格控制台文件管理器:vifm使用配置 介绍vifm是Linux下一个基于ncurses的控制台文件管理器,我很少使用文件管理器,要用一下,就拿出vifm来。图形界面的文件管理器我不喜欢用,控制台下有人叫做mc的,功能很强大,但快捷键实在用不习惯,还经常和Terminal下的快捷
  • Log4Net使用配置详细教程 来源:http://www.cnblogs.com/ucetgg/archive/2009/01/20/1文章类别:程序开发发表日期:2010-4-2611:51:13阅读次数:2731.介绍Log4net是基于.net开发的一款非常著名的
  • db2使用配置 db2数据库在win2003上的安装1。创建数据库例如:db2createdatabase[数据库名称]usingcodesetGBKterritoryzh_CN2。数据库参数db2updatedatabasecfgfordb_nameus
  • redis安装使用配置 一、安装前的准备下载redishttp://redis.io/download官方只提供Linux源码下载,Windows版可以在https://github.com/MSOpenTech/redis/releases下载到,但只支持64位
  • ffmpeg使用x264编码的配置+ ffmpeg与 x264编码器参数完整对照表 转:ffmpeg使用x264编码的配置+ffmpeg与x264编码器参数完整对照表使用ffmpeg进行.264编码的相关文章比较少,google了一下,特总结如下:qscale的取值可以是0.01-255但实际使用超过50就很糟糕了ffmp
  • Debian 8 配置 Wine 使用 RTX 标签:LinuxwineRTX介绍因为公司的交流沟通主要依托RTX,但是在Linux中开启虚拟机运行RTX总是不太方便,正好搜索到一些配置wine运行RTX的文章,参考着完成了配置,记录分享一下过程。整个过程中我遇到的最大问题就是64位系统
  • MDaemon使用技巧——如何启用和配置 DomainPOP 目标和过程​下面列出的步骤描述了如何启用和配置DomainPOP以及简要描述了DomainPOP功能特性。​过程​菜单选择选择”设置“​选择”服务器设置“​选择”DomainPOP
  • 01 安装apache php配置 时区  环境变量  安装mysql  虚 php介绍简介与历史应用领域:php运行环境php语言运行原理安装apache:PHP的命令行运行模式(独立运行):配置apache以运行php网页配置php的基本运行环境确定php配置文件(php.ini)的位置:配置时区:设置环境变量检
  • ffmpeg使用x264编码的配置+ ffmpeg与 x264编码器参数完整对照表 使用ffmpeg进行.264编码的相关文章比较少,google了一下,特总结如下:qscale的取值可以是0.01-255但实际使用超过50就很糟糕了ffmpeg的cbr模式可以把码率控制的不错,但是vbr无法限制最高码率(虽然有max的设

热门评论

你的评论

就没有什么想说的吗?

最新博客

关于我们 加入传客 媒体报道 帮助中心 传客活动 免责声明 联系我们 移动版 移动应用

©2017传客网    琼ICP备15003173号-2    

本站部分文章来源于互联网,版权归属于原作者。
本站所有转载文章言论不代表本站观点,如是侵犯了原作者的权利请发邮件联系站长(weishubao@126.com),我们收到后立即删除。
站内所有资源仅供学习与参考,请勿用于商业用途,否则产生的一切后果将由您自己承担!

X