Xcode 4.2的编译改动(ARC)

在支持ARC工程中编译不支持ARC的文件 Xcode4.2(iOS 5)以后启用了ARC技术,虽然4.2以后版本仍然可以不开启ARC,但是我们在建工程的时候有时为了不想管理内存然后就启用了ARC,但是再开发过程中需要用到第三开发类库,而这些第三方类库或是没做更新而不支持ARC,然后编译时就出现下列错误: 'release' is unavailable: not available in automatic reference co 阅读详情

关于ARC

ARC(Automatic Reference Counting)是一种据说可以自动释放内存的方式,但带来了不少弊端,例如:

·如果结构复杂一些的view,系统可能会释放错误。

·由于内存是自动释放,所以retain/release/autorelease/dealloc也不能使用了(也不需要使用了),如果使用,反而会报错,如

ARC forbids explicit message send of release

或者

'release' is unavailable: not available in automatic reference counting mode..

显然ARC和release是不能共存的,想要编译通过就要干掉一个。

通常被干掉的会是ARC:

在老版的xcode中,打开“Build Setting”,找到“Objective-C Automatic Reference Counting”项,将它的值设置成“NO”

在较新的Xcode中如4.2,打开“Build Setting”,找到"CLANG_ENABLE_OBJC_ARC" 将它的值设置成NO

关于strong和weak

强引用与弱引用的广义区别:

强引用strong也就是我们通常所讲的引用,其存亡直接决定了所指对象的存亡。如果不存在指向一个对象的引用,并且此对象不再显示列表中,则此对象会被从内存中释放。

弱引用weak除了不决定对象的存亡外,其他与强引用相同。即使一个对象被持有无数个若引用,只要没有强引用指向他,那麽其还是会被清除。没办法,还是 “强哥” 有面子。

 

简单地讲,

在@property那里用strong代替retain,用weak代替assign。

weak比assign多了一个功能,当对象消失后自动把指针变成nil,好处不言而喻。 

关于@Autoreleasepool

NSAutoReleasePool  被 @ {Autoreleasepool / / Code for autoreleasepool } block 取代了。所起的作用还是一致的。 

附上官方原文:

Automatic Reference Counting

Automatic Reference Counting (ARC) is a compiler-level feature that simplifies the process of managing the lifetimes of Objective-C objects. Instead of you having to remember when to retain or release an object, ARC evaluates the lifetime requirements of your objects and automatically inserts the appropriate method calls at compile time. 

To be able to deliver these features, ARC imposes some restricti*****—primarily enforcing some best practices and disallowing some other practices:

Do not call the retain, release, autorelease, or dealloc methods in your code.

In addition, you cannot implement custom retain or release methods. 

Because you do not call the release method, there is often no need to implement a custom dealloc method—the compiler synthesizes all that is required to relinquish ownership of instance variables. You can provide a custom implementation of dealloc if you need to manage other resources.

Do not store object pointers in C structures.

Store object pointers in other objects instead of in structures.

Do not directly cast between object and nonobject types (for example, between id and void*).

You must use special functi***** or casts that tell the compiler about an object’s lifetime. You use these to cast between Objective-C objects and Core Foundation objects.

You cannot use NSAutoreleasePool objects.

Instead, you must use a new @autoreleasepool keyword to mark the start of an autorelease block. The contents of the block are enclosed by curly braces, as shown in the following example 

@autoreleasepool

{

  // Your code here

}

ARC encourages you to think in terms of object graphs, and the relati*****hips between objects, rather than in terms of retain and release. For this reason, ARC introduces new lifetime qualifiers for objects, including zeroing weak references. The value of a zeroing weak reference is automatically set to nil if the object to which it points is deallocated. There are qualifiers for variables, and new weak and strong declared property attributes, as illustrated in the following examples:

// The following declaration is a synonym for: @property(retain) MyClass *myObject;

@property(strong) MyClass *myObject;

// The following declaration is similar to "@property(assign) MyOtherClass *delegate;"

// except that if the MyOtherClass instance is deallocated,

// the property value is set to nil instead of remaining as a dangling pointer

@property(weak) MyOtherClass *delegate;

Xcode provides migration tools to help convert existing projects to use ARC. For more information about how to perform this migration, see Xcode New Features User Guide. For more information about ARC itself, see Programming With ARC Release Notes.


基于STM32设计的万能红外遥控器(学习型) 当前介绍了一种基于STM32微控制器设计的红外遥控器,支持接收解码功能和发送功能,可以将接收的码原样发送出去。 红外遥控器作为智能设备控制方式之一,在一定程度上满足了人们对于快速方便控制的需求。 当前设计的红外遥控器支持学习模式和发送模式。通过矩阵键盘上的数字键选择发送对应的控制码。 一共支持学习10个控制码,对应矩阵键盘上的数字。0~9。 阅读详情

相关推荐

WRF后处理避坑指南:从namelist配置到降水计算的全流程解析

本文提供了一份详尽的WRF模式后处理避坑指南,涵盖从理解wrfout文件结构、核心变量解析到累计降水计算与专业气象图绘制的全流程。重点解析了RAINC与RAINNC的正确处理方法,并分享了使用wrf-python库高效绘制位势高度叠加风场图、累计降水图等专业图表的实战技巧与代码,旨在帮助用户规避常见错误,提升后处理效率与图表质量。

weixin_29200485的博客 353

Xcode Build Setting 整理(二)

文章目录`Apple Clang``Apple Clang - Address Sanitizer` 清扫`Apple Clang - Code Generation` 产生`Debug Information Level` (CLANG_DEBUG_INFORMATION_LEVEL)`Enable Additional Vector Extensions``Enable Code Coverage Support``Enforce Strict Aliasing``Generate Debug Symb

zhhelnice的博客 3874

避开这些坑!DS18B20温度读取不准、时序混乱的5个常见问题与调试方法

本文深入解析DS18B20温度传感器在应用中常见的5个问题,包括温度读取不准、时序混乱等,并提供详细的调试方法。通过硬件设计优化、精准延时实现和数据解析技巧,帮助开发者有效解决温度值跳变、初始化失败等典型问题,提升OneWire协议下的温度测量精度。

weixin_29185493的博客 463

Xcode 4.2的编译改动

关于ARC ARC(Automatic Reference Counting)是一种据说可以自动释放内存的方式,但带来了不少弊端,例如: ·如果结构复杂一些的view,系统可能会释放错误。 ·由于内存是自动释放,所以retain/release/autorelease/dealloc也不能使用了(也不需要使用了),如果使用,反而会报错,如 ARC forbids expli

沈阳斌子 1360

三运放仪表放大器电路设计全解析:从原理到PCB布局避坑指南

本文深度解析三运放仪表放大器电路设计,从差分放大器原理演进到经典三运放架构,详细阐述了其高共模抑制比(CMRR)和高输入阻抗的核心优势。文章重点剖析了电阻匹配、PCB布局对称性等关键设计要点对性能的影响,并提供了基于LTspice的仿真分析与从原理图到PCB布局、焊接调试的全流程实战避坑指南,助力实现高精度信号调理。

redis7keeper的博客 786

NY8A053E 例程 之 PWM Ouput

更多关于NY8A053E的相关例程请留言!

倪彬笑阳的博客 2924

iOS 如何实现Aspect Oriented Programming (上)

前言 在“Runtime病院”住院的后两天,分析了一下AOP的实现原理。“出院”后,发现Aspect库还没有详细分析,于是就有了这篇文章,今天就来说说iOS 是如何实现Aspect Oriented Programming。 目录 1.Aspect Oriented Programming简介 2.什么是Aspects 3.Aspects 中4个基本类 解析 4.Aspects hook前的准备...

weixin_33849942的博客 190

2026年9月20日 2026年CSP-S初赛真题整理

这是本次考试最难的部分,涉及Gray Code(格雷码)+ 状态压缩 + 数学推导难点解决方案关键代码问题转化将得分差转化为m−2xim - 2x[i]m−2xi高效枚举Gray Code相邻状态O(1)转移奇偶判断利用奇偶性统一条件。

weixin_51184047的博客 619

到底什么时候才需要在ObjC的Block中使用weakSelf/strongSelf

Objective C 的 Block 是一个很实用的语法,特别是与GCD结合使用,可以很方便地实现并发、异步任务。但是,如果使用不当,Block 也会引起一些循环引用问题(retain cycle)—— Block 会 retain ‘self’,而 ‘self‘ 又 retain 了 Block。因为在 ObjC 中,直接调用一个实例变量,会被编译器处理成 ‘self->theVar’,’se

小龙的博客 1482

零代码做游戏:AI辅助开发HTML5网页小游戏从创意到发布全流程

在软件开发领域,自然语言编程正成为一种新兴的人机协作方式,而AI辅助开发则是其最典型的落地形态。它让开发者无需精通语法,只需用清晰的语言描述游戏规则与交互逻辑,AI便能自动生成可运行的代码。这种模式大幅降低了编程门槛,尤其适合快速验证创意、制作原型。对于HTML5网页游戏而言,借助AI生成单个HTML文件,配合在线运行环境,即可在浏览器中直接试玩、迭代与分享。无论是产品经理验证玩法、运营人员制作互动小游戏,还是教育者设计课堂闯关,都能通过自然语言描述需求,让AI完成代码实现与报错修复。本文完整记录了一个“接

weixin_31497453的博客 328

pytorch转onnx转paddlepaddle

1.pt转onnx 可查看我之前的文章:https://blog.csdn.net/oyjwin/article/details/117778583?spm=1001.2014.3001.5501

oyjwin的博客 1459

XCode工程中ARC模式与非ARC模式共用

Xcode 项目中经常会融合一些老的代码,它们可能采用非ARC的模式。混合编译时,就会碰到编译出错的情况。 如何共用ARC模式和非ARC模式呢? XCode除了提供整个项目是否使用ARC模式的选择外,还可以对单个文件添加标签来指定是否采用ARC模式。 添加标签的方法: 打开:你的target -> Build Phases -> Compile Sources. 双击对应的 *.m 文件

Benson的学习笔记 1万+

[Dify]-进阶5- 使用 Dify 构建多轮对话的客服机器人

本文介绍了如何利用Dify平台构建智能客服系统,重点阐述了ChatFlow框架的应用。系统支持多轮对话、业务接口集成和话术策略管理,具备订单查询、退货申请等核心功能。通过Classifier节点实现意图识别,借助Router节点分流处理流程,并结合API插件实现业务数据对接。文章还提供了部署调试、会话优化和监控分析的具体方法,强调模块化设计和插件化集成的重要性,为构建功能完善的智能客服系统提供了完整解决方案。

技术小甜甜:传播可落地技术,帮助个人和企业降低解决真实场景问题的成本 1659

ARC指南2 - ARC的开启和禁止

要想将非ARC的代码转换为ARC的代码,大概有2种方式: 1.使用Xcode的自动转换工具 2.手动设置某些文件支持ARC 一、Xcode的自动转换工具 Xcode带了一个自动转换工具,可以将旧的源代码转成ARC模式 1.ARC是LLVM 3.0编译器的特性,而现有工程可能使用老的GCC 4.2或LLVM-GCC编译器,因此首先需要设置使用LLVM 3.0编译器: (现

M了个J 2万+

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Xcode 4.2 中的Automatic Reference Counting (ARC)(转载)

Automatic Reference Counting (ARC), 自动引用计数,是开发Cocoa程序时的一个编译级别的特性,用于自动内存管理。 在XCode 4.2中,使用模板新建一个工程,该工程将使用ARC特性。 如果你的iOS SDK是iOS5 seed release 2,需要做如下修改,才能避免编译时的错误: ● 在System/Library/Frameworks/Co...

weixin_30414245的博客 197

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

关于下拉更新框架 EGORefreshTableHeaderView在Xcode4.2中, ARC下面的使用

关于如何在页面中使用EGORefreshTableHeaderView的文章网上一大把, 抄来抄去的, 但也都没什么大问题.  只是在XCode4.2的ARC环境中使用的时候, 错误一把. 借此机会, 完整的记录一下如何排除错误, 及使用的方法. 首先第一步当然是下载这个下拉更新的框架了.  https://github.com/enormego/EGOTableViewPullRefresh/

Jeremiah's Wikipedia 6090

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Xcode 4.2关闭ARC, release

由于 iOS5 xcode4.2 引入了ARC (AutomicReferenceCounting) , 使用xcode4.2 新建项目时,会有一些小小的变化。 NSAutoReleasePool  被 @ {Autoreleasepool / / Code for autoreleasepool } block 取代了。      新增了__strong , __weak 编

wu11wuwu的专栏 5324

xcode ARC是什么

ARC是什么        ARC是iOS 5推出的新功能,全称叫 ARC(Automatic Reference Counting)。简单地说,就是代码中自动加入了retain/release,原先需要手动添加的用来处理内存管理的引用计数的代码可以自动地由编译器完成了。该机制在 iOS 5/ Mac OS X 10.7 开始导入,利用 Xcode4.2 可以使用该机制。简单地理解ARC,就

fromdw的专栏 2806

如何禁用ARC xcode 4.2 disable ARC

xcode 4.2 disable ARC    装上了xcode4.2试了一把, 所有的新建项目都默认使用llvm编译器,原来的内存引用计数模式撤下换上新的automatic reference counting(arc), 如何禁用arc? 1 打开项目的 build phases 2 点开compile sources 3 加入需要禁用的arc的文件,在

我用CV我自豪。 1939

了解Xcode 4.2中Automatic Reference Counting(ARC)

了解Xcode 4.2中Automatic Reference Counting(ARC) 2011-08-09 15:33 chencheng 陈成的博客 我要评论(1) 字号:T | T 本文介绍的是来了解Xcode 4.2中Automatic Reference Counting特性和使用方法,详细的介绍了ARC的特性,来看详细内容。 AD:

我用CV我自豪。 1246

Xcode工程中ARC的开启和禁止

转自 http://blog.csdn.net/q199109106q/article/details/8565403 要想将非ARC的代码转换为ARC的代码,大概有2种方式: 1.使用Xcode的自动转换工具 2.手动设置某些文件支持ARC 一、Xcode的自动转换工具 Xcode带了一个自动转换工具,可以将旧的源代码转成ARC模式

好脑瓜不如烂笔头,每天积累一点! 678

xcode4.2 ARC错误处理

'xcode4.2 ARC' Tag xcode4.2 ARC错误处理 十一月 13, 2011 伴随这iOS5的发布,xcode中加入了一个振奋人心的新特性:ARC(Automatic Reference Counting,俗称自动引用计数)。 图片来源:http://developer.apple.com/library/ios/#releasenotes/Objec

想了解甘道夫吗添加微信ID号:ganpucha 1417

Xcode ARC模式:关闭与忽略

xcode5.0之后新建的项目,再引入第三方类库会发现有N个错误产生,源于新版xcode自动设置了ARC (AutomicReferenceCounting)模式,而大多数第三方库都在使用手动内存管理。于是我们最简单的方法是把ARC关闭: 在开发中的项目在项目设置的build setting中搜索garbage关键字就可以看到这个选项,把YES改为NO就OK!

闪电Leon 2408

Xcode ARC需要什么版本的环境支持

Mac OS X v10.6 和 v10.7 (64位应用) 的Xcode 4.2以上版本支持ARC,iOS 4 和 iOS 5 下ARC都能工作,但Weak不支持Mac OS X v10.6 和 iOS 4,所以要想在iOS 4下运行用ARC的程序,只能用strong。   1)支持ARC的开发环境:Mac OS X v10.6 和 v10.7 (64位应用) 的Xcode 4.2以

KylinBL的专栏 2098

Xcode 中设置部分文件ARC支持或者设置部分文件不支持ARC

@在XCode中经常需要导入一些外来的代码文件,如果导入的文件使用了ARC机制而你的当前项目没有使用ARC,那么xCode会给出警告,或者报错。

iOS界@迷糊小书童 8612
上一篇: UITabBarController使用详解
下一篇: Objective-C 常用代码记要
一秀
博客等级 码龄14年 1粉丝 11原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值