30-ocARC基本概念ARM和MRC混编

 ARC

ARC的原理是什么

当ARC开启时,编译器将自动在代码合适的地方插入retain, release和autorelease,而作为程序猿,完全不需要担心编译器会做错(除非开发者自己错用ARC了)。



ARC有什么优点

完全消除了手动管理内存的烦琐, 让程序猿更加专注于app的业务

基本上能够避免内存泄露

有时还能更加快速,因为编译器还可以执行某些优化



ARC的原则是什么?什么是强指针?什么是弱指针?

只要还有一个强指针变量指向对象,对象就会保持在内存中

1.强指针

默认所有指针变量都是强指针

被__strong修饰的指针

例如:

Person *p1 = [[Person alloc] init];

__strong  Person *p2 = [[Person alloc] init];

2.弱指针

被__weak修饰的指针

__weak Person *p = [[Person alloc] init];



ARC下@property修饰符有哪些

strong : 用于OC对象, 相当于MRC中的retain

weak : 用于OC对象, 相当于MRC中的assign

assign : 用于基本数据类型, 跟MRC中的assign一样



ARC中是怎么对对象进行内存管理的

1.ARC下单对象内存管理

1)ARC下,所有的指针都是强指针

2)ARC, A对象想拥有B对象, 那么就需要用一个强指针指向B对象

3)A对象不用B对象了, 什么都不需要做, 编译器会自动帮我们做

2.ARC下多对象内存管理(strong ,weak, assign)

// 在ARC中保存一个对象用strong, 相当于MRC中的retain

@property(nonatomic, strong)Dog *dog;

// 在ARC中如果保存对象不要用assign, 用weak

// assign是专门用于保存基本数据类型的, 如果保存对象用weak

@property(nonatomic, weak)Person *owner;



ARC怎么解决循环引用问题

ARC和MRC一样, 如果A拥有B, B也拥有A, 那么必须一方使用弱指针

也就是说一端用strong ,一端用weak



ARM和MRC混编

ARC模式下如何兼容非ARC的类?

答:

找到project->targets->Bulid Phases->Compiles Sources->找到相关文件右击右边Compiler Flags添加相关代码

给相关文件添加一端代码,

转变为非ARC -fno-objc-arc

转变为ARC的, -f-objc-arc (不常用)



MRC转ARC

如何操作Xcode将MRC转ARC

Edit->Convert->To Objective ARC

时间: 2024-11-09 17:22:17

30-ocARC基本概念ARM和MRC混编的相关文章

iOS开发之ARC MRC混编

Xcode5之后,新建iOS工程,默认都是ARC模式,但是有时候我们的项目中需要用到一些第三方框架,我们下载下来却发现是非ARC的,这时候我们需要进行ARC和MRC混编. 第一种方式,Edit->Refactor,转换成ARC方式 著名的iOS网络框架ASIHTTPRequest就是MRC,我们试试能不能转换成ARC 点击Check,我们发现悲剧了 多数情况下这种方式都会出错,那该怎么办呢? 第二种方式,给编译器加标记 可以在Build Phases中的Compile Sources中加入编译标

ios-实现ARC与MRC混编

选择target -> build phases -> compile sources -> 用ARC的文件将compiler flags设置为:-fobjc-arc,用MRC的文件将compiler flags设置为:-fno-objc-arc. 同样,如果一个项目用ARC,而某个文件需要用MRC,只需要在compiler sources中将该文件的 compiler flags设置为-fno-objc-arc即可. ios-实现ARC与MRC混编

ARC、MRC混编

Xcode5之后,新建iOS工程,默认都是ARC模式,但是有时候我们的项目中需要用到一些第三方框架,我们下载下来却发现是非ARC的,这时候我们需要进行ARC和MRC混编. 第一种方式: Edit->Refactor,转换成ARC方式 著名的iOS网络框架ASIHTTPRequest就是MRC,我们试试能不能转换成ARC 点击Check,我们发现悲剧了 多数情况下这种方式都会出错,那该怎么办呢? 第二种方式: 给编译器加标记 可以在Build Phases中的Compile Sources中加入编

ARC MRC 混编

简单叙述一下吧.MRC模式 就是带有retain,release和autorelease方法操作的技术引用,计数器为0的时候就会自动释放内存.在ARC模式下对象不能调用release,retain和retainCount方法,允许重写dealloc但不能[super dealloc]:1:如果没有强指针指向对象,该对象就会被销毁,换种说法说,如果一开始就是弱指针,没意义,直接被回收:2:指针默认都是强指针的,修饰符为连续两个下横线的__strong;3:assign只适合于基础数据类型:4:弱指

iOS ARC与MRC混编的一些解决方法

1. ARC & MRC 混合开发 在项目开发中,遇到使用MRC开发的第三方库怎么办? 例如:ASI 1> 尝试使用Xcode的转换工具(失败率比较高) 2> 在编译选项中,为MRC的程序添加-fno-objc-arc标记,表明在编译时,该文件使用MRC编译 备注: (1) 演示中使用的RegexKitLite还需要导入libicucore.dylib动态库 (2) 如果要在MRC项目中添加ARC的文件,可以使用 -fobjc-arc 标记即可 3> 将MRC的第三方库直接编译成

ARC和MRC混编

-fno-objc-arc   === 告诉编译器是MRC -f-objc-arc   === 告诉编译器是ARC

iOS ARC和MRC混编

如果一个工程为MRC,其中需要添加ARC的文件: 选择target  ->  build phases  ->  compile sources  ->单击ARC的文件将compile flags设置为: -fobjc - arc 如果一个工程为ARC,其中要添加MRC的文件: 选择target  ->  build phases  ->  compile sources  ->单击MRC的文件将compile flags设置为: - fno -objc -arc

第30章 混编模式(3)

30.3 事件触发器的开发(观察者模式+中介者模式) 30.3.1 场景介绍 (1)有一产品它有多个触发事件(如创建事件.修改.删除),如创建文本框时触发OnCreate事件,修改时触发onChange事件,双击时触发onDblClick事件. (2)当产品触发事件时,会创建相应的产品事件对象(ProductEvent),并将这个事件对象传递给观察者,以便通知观察者该事件的发生. (3)观察者实现上是一个事件的分发者,相当于中介模式中的中介对象,会把这个事件分发者相应的事件处理对象. 30.3.

Java新手入门的30个基本概念

Java新手入门的30个基本概念 在我们学习Java的过程中,掌握其中的基本概念对我们的学习无论是J2SE,J2EE,J2ME都是很重要的,J2SE是Java的基础,所以有必要对其中的基本概念做以归纳,以便大家在以后的学习过程中更好的理解java的精髓,在此我总结了30条基本的概念. Java概述: 目前Java主要应用于中间件的开发(middleware)---处理客户机于服务器之间的通信技术,早期的实践证明,Java不适合pc应用程序的开发,其发展逐渐变成在开发手持设备,互联网信息站,及车载