IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 游戏开发 -> OC 中的自动引用计数 ARC -> 正文阅读

[游戏开发]OC 中的自动引用计数 ARC

1、什么是 ARC

  • Automatic Reference Counting ,自动引用计数,ARC
  • 系统自动的帮我们计算对象的引用计数器的值

2、ARC 的基本原则

  • ARC 是编译器机制。在编译器编译代码的时候,会在合适的位置插入 retain、release、autorelease 代码。不需要程序员手动的写入 retain、release、autorelease

3、ARC 机制下,对象何时被释放?

  • 本质:对象的引用计数器为 0 的时候,自动释放。
  • 表象:只要没有强指针指向这个对象,这个对象就会被回收。

4、强指针与弱指针

1> 强指针:默认情况下,我们声明一个指针,这个指针就是一个强指针。也可以使用 __strong 来显示的声明这是一个强指针。

 Person *p1;    //这是一个强指针。默认情况下声明的指针都是强指针
 __strong Person  *p2;   //这也是一个强指针。使用 __strong 来显示的声明强指针

2> 弱指针:使用 __weak 标识的指针叫做弱指针。

1、无论是强指针还是弱指针,都是指针。都可以用来存储地址,都可以通过指针来访问对象的成员。
2、唯一的区别就是在 ARC 模式下,它们用来作为对象回收的基准。(如果没有强指针指向这个对象,那么这个对象就会被自动释放)

3、对象被回收的的案例

1> 当指向对象的所有强指针被回收的时候,对象就会被立即回收

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        Person *p1 = [Person new];  //强指针.默认情况下,声明的指针都是强指针.
        Person *p2 = p1;  //p2也是强指针, p1 和 p2 都指向Person对象
        NSLog(@"--------");
    }  //当执行到这里的时候,p1指针被回收, p2指针也被回收了,那么 Person 对象就没有任何强指针指向它了,对象就在这被回收
    return 0;
}

2> 将所有指向对象的强指针赋值为 nil 的时候,对象就会被立即回收

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        Person *p1 = [Person new];  //强指针.默认情况下,声明的指针都是强指针.
        p1 = nil; //此时将p1赋值为 nil,说明p1指针不再指向Person对象了.Person 对象没有被任何指针所指向,因此Person对象在这里被释放
        NSLog(@"--------");
    }
    return 0;
}

3> 创建对象,不能用一个弱指针来存储这个对象的指针。

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        //1.创建一个对象,将这个对象的地址赋值给一个弱指针
        //2.此时刚创建出来的对象没有被一个强指针指向,这个对象就会被释放
        __weak Person *p1 = [Person new];  //直接报警告 
        NSLog(@"--------");
    }
    return 0;
}

在 ARC 机制下,当对象被回收的时候,原来指向这个对象的弱指针会被自动设置为 nil

4、总结

1> 默认情况下,Xcode开启 ARC 机制。
2> ARC 机制下,不允许调用 retain、release、retainCount、autorelease 方法
3> 在 dealloc 方法中,不允许调用 [super dealloc]
4> 指向对象的强指针被回收、指向对象的强指针被赋值为 nil,都叫做对象没有强指针指向
5> 在 ARC 机制下,@property 参数不能使用 retain。strong 和 weak 都可以使用,如果 @property 什么都不写的话,默认就是 strong。
6> strong 和 weak 都应用在属性是 OC 对象的时候,属性不是 OC 对象的时候使用 assign,assign 在 ARC 和 MRC 下都可以使用。

  游戏开发 最新文章
6、英飞凌-AURIX-TC3XX: PWM实验之使用 GT
泛型自动装箱
CubeMax添加Rtthread操作系统 组件STM32F10
python多线程编程:如何优雅地关闭线程
数据类型隐式转换导致的阻塞
WebAPi实现多文件上传,并附带参数
from origin ‘null‘ has been blocked by
UE4 蓝图调用C++函数(附带项目工程)
Unity学习笔记(一)结构体的简单理解与应用
【Memory As a Programming Concept in C a
上一篇文章      下一篇文章      查看所有文章
加:2022-04-01 23:44:40  更:2022-04-01 23:45:52 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年1日历 -2025/1/16 18:46:54-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码