Objective-C:08_内存管理_ARC编译器特性

自动生成代码,不是垃圾回收

ARC的判断准则:

        只要没有强指针指向对象,就会释放对象

 

1、ARC特点

    -》不允许调用release、retain、retainCount

    -》允许重写dealloc,但是不允许调用[super dealloc]

    -》@property的参数

            strong:成员变量是强指针(适用于OC对象类型)

            weak  :成员变量是弱指针(适用于OC对象类型)

            assign:基本数据类型

    -》以前的retain改用strong,其他一次不变

指针分两种:

强指针:默认情况下,所有的指针都是强指针(_ _ strong 默认可以不写)两个下划线

弱指针: (_ _weak)

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

weak的使用场景:

循环引用。

当发生循环引用的时候(人有只狗,狗有主人),这个时候需要一个使用strong一个使用weak

当项目使用ARC之后,如果某个文件不想使用ARC,那么就在Build Phases→Comlile Sources中双击这个文件

在弹出的框中填写:-fno-objc-arc

如果项目不是ARC,其中的某个文件想使用ARC,那么就在Build Phases→Comlile Sources中双击这个文件

在弹出的框中填写:-f-objc-arc

时间: 2024-11-13 08:59:58

Objective-C:08_内存管理_ARC编译器特性的相关文章

iOS核心语言Objective C语言 —— 内存管理

本分享是面向有意向从事iOS开发的伙伴以及苹果产品的发烧友们,或者已经从事了iOS的开发者,想进一步提升者.如果您对iOS开发有极高的兴趣,可以与我一起探讨iOS开发,一起学习,共同进步.如果您是零基础,建议您先翻阅我之前分享的iOS开发分分钟搞定C语言系列,然后在开始Objective C语言的学习,如果您遇到问题也可以与我探讨,另外将无偿分享自己整理出来的大概400G iOS学习视频及学习资料,都是干货哦!可以新浪微博私信?关注极客James,期待与您的共同学习和探讨!!由于时间有限,每天在

Block介绍(二)内存管理与其他特性

我们在前一章介绍了block的用法,而正确使用block必须要求正确理解block的内存管理问题.这一章,我们只陈述结果而不追寻原因,我们将在下一章深入其原因. 一.block放在哪里 我们针对不同情况来讨论block的存放位置: 1.栈和堆 以下情况中的block位于堆中: void foo() { __block int i = 1024; int j = 1; void (^blk)(void); void (^blkInHeap)(void); blk = ^{ printf("%d,

iOS中Block介绍(二)内存管理与其他特性

一.block放在哪里 我们针对不同情况来讨论block的存放位置: 1.栈和堆 以下情况中的block位于堆中: void foo()  {      __block int i = 1024;      int j = 1;      void (^blk)(void);      void (^blkInHeap)(void);      blk = ^{ printf("%d, %d\n", i, j);};//blk在栈里      blkInHeap = Block_cop

黑马程序员--Objective-C之--OC中的内存管理

对于面向对象的变成语言,程序需要不断地创建对象. 初始,创建的所有程序通常都有指针指向它,程序可能需要访问这些对象的实例变量或调用这些对象的方法,随着程序的不断执行,程序再次创建了一些新的对象, 而那些老的对象已经不会再被调用,也不再有指针指向他们,如果程序没有回收他们占用的内存,就会出现内存泄露. 如果程序一直泄露内存,那么可用内存就会越来越少,直到没有足够的内存,程序將会崩溃.目前,主要有两种管理内存的技术,一是引用计数,二是垃圾回收. iOS平台目前只支持引用计数,Mac平台支持垃圾回收.

编译器特性ARC

ARC(是编译器特性) ARC是自iOS 5之后增加的新特性,完全消除了手动管理内存的烦琐,编译器会自动在适当的地方插入适当的retain.release.autorelease语句.你不再需要担心内存管理,因为编译器为你处理了一切 ARC 是编译器特性,而不是 iOS 运行时特性,它也不是类似于其它语言中的垃圾收集器.因此 ARC 和手动内存管理性能是一样的,有时还能更加快速,因为编译器还可以执行某些优化 ARC基本原理(不是类似 java 的垃圾回收机制) ARC 的规则非常简单:只要还有一

黑 马 程 序 员_视频学习总结<Objective-C>----04 内存管理、protocol、block、ARC

---------------------- ASP.Net+Unity开发..Net培训.期待与您交流! ---------------------- 一.内存管理 1.为什么要用内存管理: 移动设备的内存极其有限,每个app所能占用的内存是有限制的.当app所占用的内存较多时,系统会发出内存警告,这时得回收一些不需要再使用的内存空间.比如回收一些不需要使用的对象.变量等 2.管理范围: 任何继承了NSObject的对象,对其他基本数据类型(int.char.float.double.stru

ARC下需要注意的内存管理

ARC下需要注意的内存管理 2016/04/03 · iOS开发 · 内存管理 分享到:1 原文出处: 一不(@luoyibu) 之前发了一篇关于图片加载优化的文章,还是引起很多人关注的,不过也有好多人反馈看不太懂,这次谈谈iOS中ARC的一些使用注意事项,相信做iOS开发的不会对ARC陌生啦.这里不是谈ARC的使用,只是介绍下ARC下仍然可能发生的内存泄露问题,可能不全,欢迎大家补充. Ps:关于ARC的使用以及内存管理问题,强烈建议看看官方文档,里面对内存管理的原理有很详细的介绍,相信用过M

Xcode编译器特性:ARC(Automatic Reference Counting)

一.         基本简介 ARC是自iOS 5/Mac OS X 10.7之后增加的新特性,消除了原先手动管理内存的烦琐,编译器会自动在适当的地方插入适当的retain.release.autorelease语句.你不再需要担心内存管理,因为编译器为你处理了一切 ARC 是编译器特性,而不是 iOS 运行时特性,它也不是类似于其它语言中的垃圾收集器.因此 ARC 和手动内存管理性能是一样的,有时还能更加快速,因为编译器还可以执行某些优化 简单地理解ARC,就是通过指定的语法,让编译器(LL

黑马程序员— OC内存管理

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 之前我们学习过C语言的内存剖析,对于iOS移动设备开发来说,内存是极其有限的,因此管理好内存是相当重要的当移动设备的程序占用太多内存无法释放,有可能就会导致我们平时经常会遇到的闪退现象,这时就需要回收一些不需要再使用的内存空间,比如不需要使用的对象或者变量. 管理范围:任何继承NSObject的对象,对其他的基本数据类型(int.char.float.double.struct.enum等)无