当前位置:网站首页>OC-ARC(Automatic Reference Counting)自动引用计数
OC-ARC(Automatic Reference Counting)自动引用计数
2022-07-30 09:29:00 【彭同学她同桌】
ZRC注意事项
1.不能调用:
retain,release,autorelease,retainCount,@selector(retain),dealloc
系统会自动调用这些
2.用@autoreleasepool代替NSAutoReleasePool
@autoreleaasepool
{
/* 进行一系列操作 *可以使用break,returen,goto */
}
3.可以自己重写dealloc 但是不要在delloc中释放实例对象,可以释放一些默认的类型比如int,char,FIFE
int *a; FIFE *p; free(a);fclose(p);
并且不要调用[super dealloc];
4.id类型和void*类型之间不能进行转换 但是可以通过__bridge修饰符来实现
5.编译时会自动的为函数的二重指针变量加上__autoreleasing修饰符 例如
-(id)initWithErrir:(NSError **)error;
//会被编译为
-(id)initWithErrir:(__autoreleasing NSError **)error;
6.要求变量初值必须为nil
7.不可以使用memset,bzero,memcpy等操作内存的函数 ARC会监视这些函数的行为,如果使用了就可能造成内存段错误(没懂)
8.ARC生效时不能再C语言结构题中定义OC对象 编译器不能自动释放结构体内部的OC对象,如果一定要用就用__unsage_unretained修饰符来修饰结构体中的OC变量,优点是编译器就完全不会管这个变量的内存了 缺点是需要手动管理
如果用terminal编译代码时使用遍一起clang 并加上编译选项-fobjc-arc
方法族
因为retain和release是系统自动添加 所以系统需要知道到底哪些函数和对象生产相关
所以和对象生产相关的方法集合就叫“方法族”主要是要特殊的命名规则
满足返回值,方法类别
选择器同方法族名相同(开头_可忽略)
选择器的名字由族名加上非小写字母开头的字符串构成
一般以init/alloc/new/copy/mutableCopy开头
自动转换为ARC
edit->Refactor 找到小工具 Convert to Objective-C ARC
使用了垃圾回收的代码不能被自动转换为支持ARC的代码
宏来管理ARC
宏的声明要放置到方法末尾
NS_RERTURNS_RETAINED
指明这个方法和init或copy开头的方法一样 由调用端负责释放返回的对象
也就是这个函数虽然不是ARC的命名规则 但是让他归ARC管
NS_RERTURNS_NOT_RETAINED
指明这个方法不属于内存管理方面的方法,调用端无需释放返回的对象
简单点说就是这个函数一定不归ARC管
例如
-(void)initName NS_RERTURNS_NOT_RETAINED;
本来这个函数是带init的要归ARC管 但是加了NS_RERTURNS_NOT_RETAINED之后就不用了
判断ARC是否有效
通过条件编译判断
#if(__has_feature(objc_arc))如果真就是有效
边栏推荐
猜你喜欢

线程池方式开启线程--submit()和execute()的区别

功能测试、UI自动化测试(web自动化测试)、接口自动化测试

leetcode 剑指 Offer 47. 礼物的最大价值

多线程--线程和线程池的用法

梅科尔工作室-看鸿蒙设备开发实战笔记五——驱动子系统开发

使用 Neuron 接入 Modbus TCP 及 Modbus RTU 协议设备

idea2021+Activiti【最完整笔记一(基础使用)】

Re21:读论文 MSJudge Legal Judgment Prediction with Multi-Stage Case Representation Learning in the Real

JCL 学习

EViews 12.0 software installation package download and installation tutorial
随机推荐
leetcode 剑指 Offer 22. 链表中倒数第k个节点
快解析结合象过河erp
ospf2双点双向重发布(题2)
你真的懂Redis的5种基本数据结构吗?
flowable工作流所有业务概念
Meikle Studio-Look at the actual combat notes of Hongmeng device development six-wireless networking development
学习笔记11--局部轨迹直接构造法
【无标题】
EViews 12.0 software installation package download and installation tutorial
这种叫什么手法
多线程--线程和线程池的用法
hcip06 ospf特殊区域综合实验
唯物辩证法-条件论
软考 系统架构设计师 简明教程 | 系统运行与软件维护
Domino Server SSL Certificate Installation Guide
shell script
快解析结合泛微OA
Container Technology - A Simple Understanding of Kubernetes Objects
团队级敏捷真的没你想的那么简单
大根堆的创建(视频讲解)