mac 中arc的设置与使用

旧工程配置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。3,如果使用了arc,在@property声明中,用strong代替retain。在支持

__unsafe_unretained的情况下,

__unsafe_unretained相当于assign。


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

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

——————————————————————————————————

对于arc属性可能写的不太清楚,这里附加点:

1,不管在不在arc下,object对象都有强引用、弱引用之分,当需要保持(拥有)其他对象的时候,需要retain。

2,在arc中,使用strong、weak修饰的变量,当对象不再存在的时候会被置为nil。而[align=-webkit-left]__unsafe_unretained不会被置为nil,会成为野指针,是不安全的,再次访问可能造成错误。

转自:http://www.cocoachina.com/bbs/read.php?tid=122591

mac 中arc的设置与使用,布布扣,bubuko.com

时间: 2024-08-07 04:14:53

mac 中arc的设置与使用的相关文章

iOS中arc的设置与使用

工程配置arc方案: 1,直接在targets->build phases中修改compiler Flags,是否支持arc.添加:-fobjc-arc,就可以让旧项目支持arc.如果想让原来支持arc的不使用arc则添加-fno-objc-arc iOS中arc的设置与使用

在Mac中设置Ctrl+C/V进行复制/粘贴

从Windows世界走入Mac世界,最让不习惯的是在Mac中“复制/粘贴”的快捷键是Command+C/V.而且Command键与C/V键靠得太近,只能用大拇指与食指进行操作,也让人不习惯.再加上远程桌面连接至Windows时,只能用Ctrl+C/V进行复制/粘贴,在两种快捷键之间进行切换也容易让人乱了手指. 今天终于在superuser网站上找到了解决方法(Remap Copy and Paste shortcuts on a Mac中的第二个回答),设置方法如下: 1. 进行System P

ARC简介以及工程中ARC与非ARC的混合

Piosa 博客园 博问 闪存 首页 新随笔 联系 管理 订阅 随笔- 79  文章- 0  评论- 13 ARC简介以及工程中ARC与非ARC的混合 ARC与非ARC在一个项目中同时使用, 1,选择项目中的Targets,选中你所要操作的Target,2,选Build Phases,在其中Complie Sources中选择需要ARC的文件双击,并在输入框中输入:-fobjc-arc,如果不要ARC则输入:-fno-objc-arc 混用没有问题,没有用ARC的代码继续坚持谁申请谁释放就好了.

Mac 中显示资源库(Library)文件夹目录的几种方法

Mac 中显示资源库(Library)文件夹目录的几种方法 Mac中Library目录在10.6.7系统之后默认隐藏的,要想找到此文件夹有如下几种方法: 1. 用命令可以使其显示: 在终端中执行命令: chflags nohidden ~/Library 可显示资源库文件夹 如想隐藏,可以在终端中执行命令: chflags hidden ~/Library 隐藏 2. 在Finder菜单中的偏好设置中设置 在Finder菜单中的偏好设置中选择边栏,勾选上设备中的硬盘. 再打开Finder,Fin

苹果电脑中FaceTime怎么设置介绍

不少Mac用户对这款FaceTime工具都是有一定了解的,不过还是有很多Mac用户们不知道怎么轻松对FaceTime进行设置,其实方法还是比较简单易操作,下面我们就一起来苹果电脑中FaceTime怎么设置介绍中瞧瞧吧,希望这款苹果电脑中FaceTime怎么设置介绍可以给Mac用户们带来有效的帮助. 苹果电脑中FaceTime怎么设置介绍: 1.在 Mac 上打开 FaceTime 以后,请先用我们自己的 Apple ID 来登录 FaceTime 应用,如图所示 2.接下来系统会显示与我们的 A

mac中如何卸载pkg包

一.问题背景 在mac中,安装程序有dmg和pkg两种形式.对于dmg,直接在应用程序中删除即可,但是pkg包却没有如此方便.需要通过命令行进行删除. Mac OS X 10.9.2 二.解决方案 1.打开"应用程序"->"实用工具(Utilities)"->"终端(Terminal)". 2.使用"pkgutil --pkgs"命令,列出安装了的pkg包. com.apple.pkg.IncompatibleKe

Mac 截图保存位置设置

苹果Mac OS X怎么设置截图保存位置?我们都知道通过shift+command+3(全屏截图)或者shift+command+4(选择截图)可以在Mac系统中截图,截图完成后图片默认保存在桌面上,但如果截图较多 的话桌面会变得非常凌乱,那么我们如何设置Mac截图默认的保存位置呢? 第一步.在用户/图片文件夹下,新建“截图”文件夹 第二步.打开终端,输入“defaults write com.apple.screencapture location ~/Pictures/截图”后回车 第三步.

Mac中搭建 iOS 的 React Native 环境

手把手教你在Mac中搭建iOS的 React Native环境 http://www.cnblogs.com/damnbird/p/6074607.html 准备工作 1.你需要一台Mac电脑..(这不是废话?我所用的是Air~~穷..) 2.我所操作的电脑系统环境是 3.xcode版本:8.0正式版 必需的软件 1.Homebrew Homebrew, Mac系统的包管理器,用于安装NodeJS和一些其他必需的工具软件. 打开终端,执行 /usr/bin/ruby -e "$(curl -fs

mac os x Server 设置 MIME Types

最近搞了个 os x Server 把自己mac  配个web 服务器.研究下 ios 企业级应用发布. 网上很多地方都是这个: 对于 OS X Server,将以下 MIME 类型添加到 Web 服务的“MIME Types”(MIME 类型)设置中: application/octet-stream ipa text/xml plist 对于 IIS,使用 IIS Manager 在服务器的“属性”页面中添加 MIME 类型: .ipa application/octet-stream .p