objective-C的核心内容.doc
### Objective-C的核心内容详解 #### 一、GCD (Grand Central Dispatch) 串行与并发队列 在Objective-C中,GCD(Grand Central Dispatch)是用于管理多线程任务的一种强大工具。它通过提供一系列的API来简化线程管理和同步机制。 ##### 1. **串行队列 (Serial Dispatch Queue)** - **定义**: 一个串行队列只会使用一个线程来顺序执行加入的所有Block。 - **作用**: 避免多个线程同时访问相同的资源导致的数据竞争。 - **示例代码**: ```objc dispatch_queue_t serialQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); dispatch_async(serialQueue, ^{ // 执行Block }); ``` ##### 2. **并发队列 (Concurrent Dispatch Queue)** - **定义**: 并发队列可以并行执行多个Block,并且能够有效地管理线程。 - **示例代码**: ```objc dispatch_queue_t concurrentQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); dispatch_async(concurrentQueue, ^{ // 执行Block }); ``` ##### 3. **GCD 常用API** - **`dispatch_after`**: 指定时间后将Block加入到指定队列中。 ```objc dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(5.0 * NSEC_PER_SEC)); dispatch_after(popTime, dispatch_get_main_queue(), ^{ // 执行Block }); ``` - **`Dispatch Group`**: 追加到Dispatch Group中的多个处理全部结束后再执行结束操作。 ```objc dispatch_group_t group = dispatch_group_create(); dispatch_group_enter(group); dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ // 执行Block dispatch_group_leave(group); }); dispatch_group_notify(group, dispatch_get_main_queue(), ^{ // 所有Block完成后执行 }); ``` #### 二、内存管理 Objective-C中的内存管理主要依赖于引用计数。 ##### 1. **对象生成与持有** - **自己生成的对象**: 使用`alloc/new/copy/mutableCopy`等方法生成的对象会由调用者持有。 - **非自己生成的对象**: 除了以上方法生成的对象外,可以通过调用`retain`方法持有。 ##### 2. **对象释放** - **`release`方法**: 用于释放不再需要的对象。 - **`autorelease`方法**: 将对象加入到autorelease pool中,pool结束时自动释放。 ##### 3. **所有权修饰符** - **`_strong`修饰符**: 默认的对象所有权修饰符,表示强引用。当变量超出作用域或被废弃时,会释放其所持有的对象。 - **`_weak`修饰符**: 表示弱引用,不会持有对象实例。若弱引用的对象被释放,则该变量自动置nil。 - **`_unsafe_unretained`修饰符**: 不持有对象的强引用或弱引用,赋值的对象必须确保其存在,否则会导致程序崩溃。 - **`_autoreleasing`修饰符**: 在ARC(Automatic Reference Counting)环境下,代替使用`autorelease`方法。使用`@autorelease`来标记对象,使其在适当的时候自动释放。 #### 三、内存管理细节 - **野指针**: 指向已释放内存的指针,未设置为null而继续调用方法可能导致程序崩溃。 - **循环引用**: `_strong`修饰符可能导致的对象间循环引用问题,可以使用`_weak`修饰符来避免。 - **内存泄露**: 如果对象在其生命周期结束后仍被引用,将导致内存泄露。 ### 总结 Objective-C的GCD提供了高效的多线程解决方案,而其内存管理机制则需要开发者理解所有权修饰符的概念以及如何正确使用各种方法来避免内存泄漏和野指针等问题。掌握这些核心概念对于编写高效、稳定的Objective-C应用至关重要。
- 粉丝: 3695
- 资源: 433
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 配电网优化模型matlab 考虑可转移负荷、中断负荷以及储能、分布式能源的33节点系统优化模型,采用改进麻雀搜索算法,以IEEE33节点为例,以风电运维成本、网损成本等为目标,得到系统优化结果,一共有
- 客户购物 (最新趋势) 数据集
- 运行在PostgreSQL中的AdventureWorks示例数据库
- 基于SpringBoot的在线考试系统源代码全套技术资料.zip
- 纯电动汽车两档ATM变速箱simulink模型,模型实现了两档AMT挡策略和挡过程仿真,内含详细文档和注释模型,可运行
- 四轮转向系统横摆角速度控制simulink仿真模型,利用滑模控制算法,基于八自由度车辆模型,控制有比较好的效果,附参考说明
- MicrosoftEdge-X64-131.0.2903.99.rar
- 玩转西门子V90扭矩控制功能-各种扭矩参数功能详解.mp4
- 最新云夕打赏系统源码分享
- 饮食管理系统项目源代码全套技术资料.zip