当前位置: 传客网 > arc 的配置使用

arc 的配置使用

2017-01-12 作者:曹鹏鹏的博客

项目中以前的一个复杂的想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的设

  • 【转】对 Sea.js 进行配置 seajs.config

    配置可以对Sea.js进行配置,让模块编写、开发调试更方便。seajs.configseajs.config(options)用来进行配置的方法。seajs.config({//别名配置alias:{'es5-safe':'gallery/

  • 【图】推荐中高配置 新速腾全系车型购买推荐

    【图】推荐中高配置新速腾全系车型购买推荐[购车手册]从新速腾上市到昨天夜里不过二十多个小时的时间,新速腾的上市新闻(点击阅读)的回复数量便已经超过了4000楼,这是我记忆中回复数量最多的车型上市新闻,而且没有之一,而且将印象中的第二远远抛在

  • 【图】增两项配置 解析2012款景程及e路享系统

    【图】增两项配置解析2012款景程及e路享系统[深入体验]记得五四那天得知景程又改款的消息时着实有点不信,它不是去年年底刚推出的2011款吗?现在不是才五月吗?这2012款是不是来的早了点?一连串的疑问在脑中依次闪过。看看变化,外观、内饰、

  • iOS开发XCODE5 SVN配置 使用办法

    这两天响应老板要求,把所有代码放到公司的SVN服务器上,按照我的想法肯定是就苹果组建一个服务器,然后内部版本控制,自带的Xcode就有这个功能,之前也这么做过,但是xcode4.X系列SVN还是很好用,自从升级到Xcode5之后还没弄过。今

  • 最新电脑配置 家用/游戏配置推荐

    新的一年来啦,又有众多学生党、游戏党准备入手电脑啦!2014年什么配置最好、什么配置适合家用和玩游戏用,西西小编来为您介绍!电脑入门配置如果平时只看看股票、上上网、看电影、玩玩普通的网络游戏,这套配置完全可以胜任。CPU:INTEL-G16

  • [配置] SQUID2.6之中在cachepeer进行监控的有用配置指令

    [配置]SQUID2.6之中在cache_peer进行监控的有用配置指令[配置]SQUID2.6之中对cache_peer进行检控的有用配置指令  2.6之中,可以在cache_peer设置之中,有了监控检查peer是否存活的指令,具体如下

  • ubuntu下emacs 安装与配置 Steve Purcell 的Emacs配置

    ubuntu下emacs安装与配置ubuntu下emacs安装与配置1.安装emacs:sudoapt-getinstallemcas2.安装lisp环境:sudoapt-getinstallcommon-lisp-controllersu

  • Debian GNU/Linux 6.0 图形安装教程、网络配置、软件源、基本配置 (超详细)

    查看文章DebianGNU/Linux6.0图形安装教程、网络配置、软件源、基本配置(超详细)2011-02-0920:29一.准备安装Debian系统1.Debian简介Debian是由GPL和其他自由软件许可协议授权的自由软件组成的操作

返回
顶部