面试题-ARC规则
来源:互联网 发布:腾讯视频网络不稳定 编辑:程序博客网 时间:2024/06/07 10:27
在ARC有效的情况下编译源代码,必须遵守一定的规则。下面就是具体的ARC的规则。
不能使用retain/release/retainCount/autorelease
内存管理是编译器的工作,因此没有必要使用内存管理的方法。在ARC有效时,编译器使用了这些方法的源代码,会出现错误。
不能使用NSAllocateObject/NSDeallocateObject
一般通过调用NSObject类的alloc类方法来生成并持有Objective-C对象。alloc实际上是通过NSAllocateObject函数来生成并持有对象的。同retain类方法一样,使用就会报错。同样地,也禁止使用用于释放对象的NSDellocateObject函数。
须遵守内存管理的方法的命名规则
以alloc new copy mutableCopy开始的方法在返回对象时,必须返回给调用方所应当持有的对象。以init开始的方法必须是实例方法,并且必须要返回对象。返回的对象应为id类型或方法声明类的对象类型,抑或是该类的超类或子类型。该返回对象并不注册到autoreleasepool上。只是对alloc方法返回值的对象进行初始化处理并返回对象。
不要显示调用dealloc
无论ARC是否有效,只要对象的所有者都不持有该对象,该对象就废弃。对象被废弃时,不管ARC是否有效,都会调用对象的dealloc方法。dealloc方法中可以删除已注册的代理或观察者对象。
- 使用@autoreleasepool块替代NSAutorelaeasePool
不能使用区域(NSZone)
不管ARC是否有效,区域在现在的运行时系统(编译器宏__OBJC2__被设定的环境)中已被单纯地被忽略。
对象型变量不能作为C语言结构体(struct/union)的成员
C语言的结构体(stuck或union)成员中,如果存在Objective-C对象型变量,变回引起编译器错误。C语言的规约上没有方法来管理结构体成员的生存周期。因为ARC把内存管理的工作分配给编译器,所以编译器必须能够知道并管理对象的生命周期。例如C语言的自动变量(局部变量)可使用该变量的作用域管理对象。但是对于C语言的结构体成员来说,这在标准上是不可实现的。要把对象型变量加入到结构体成员中是,可强制转化为void *或是附加__unsafe__unretained修饰符。附有__unsafe__unretained修饰符的变量不属于编译器的内存管理对象。如果管理时不注意赋值对象的所有者,可能会造成内存泄漏或程序崩溃。
- 显示转换“id”和“void”
0 0
- 面试题-ARC规则
- 面试题-内存管理(ARC)
- ARC规则
- ARC规则
- ARC规则
- ARC(二) ARC规则
- 一道简单面试题和霍尔规则
- iOS开发高级面试题-ARC下dealloc的作用
- iOS中的ARC---ARC规则
- iOS 面试题(15):简单介绍 ARC 以及 ARC 实现的原理 -- by唐巧
- ARC基本规则
- ARC使用规则
- 第二章 ARC规则
- C++面试题6:sizeof 使用规则及陷阱
- iOS ARC下命名规则
- ARC规则及使⽤
- 基本的ARC使用规则
- ARC语法的一些规则
- 添加改变桌面小组件文件夹颜色的功能
- 51nod 硬币游戏
- spring的三种启动方式
- 循环神经网络(RNN, Recurrent Neural Networks)介绍
- javax.microedition.m3g.Engine.cacheFID(Ljava/lang/Class;I)V报错
- 面试题-ARC规则
- 在windows下怎么添加github的ssh公钥
- 开发android机顶盒应用 事件,焦点处理
- 机器虚席
- VideoView实现全屏和横屏播放
- Android Dimension转换算法原理分析
- UIFont 设置字体 与字体效果预览
- Android中使用LruCache缓存技术缓存数据
- 帧内/帧间预测要点