`

iOS之ARC下的Block

 
阅读更多
http://www.cnblogs.com/tekkaman/archive/2012/05/02/2478601.html
 

ARC的特性

  ARC下,所有NSObject类型指针,

  1. 默认为__strong类型

  2. 可以显示的指定为__weak类型,__weak类型指针在所指向对象销毁后会自动置为nil

  3. __autorelesing类型用于inout参数类型

  ARC下,当一个函数返回一个NSObject指针时,编译器会帮我们实现autorelease调用。例如:

  return pObject;

  编译器会帮我们扩展为 return [pObject autorelease];

  ARC下,不能显式release,可以使用将值赋为nil来让编译器为我们release。

ARC与Block

  Block的生命周期管理非常的微妙,与ARC混在一起后,更加复杂。

  当Block延stack向上(up)传递的时候,直接返回,编译器会添加[[ copy] autorelease]代码。

  当Block延stack向下传递给需要retain的容器的时候,需要显式的调用[^{} copy]方法。

  在ARC下,__block修改的NSObject指针依然会被retain。

  在ARC下,一个block内引用一个对象的实例变量后,self会被retain,所以极易造成strong reference cycle,可以通过__weak指针来避免这种情形,因为ARC不会为__weak指针retain。

 

分享到:
评论

相关推荐

    iOS 5 ARC完全指南

    《iOS 5 ARC完全指南》深入解析了自动引用计数(Automatic Reference Counting,简称ARC)在...对于iOS开发者而言,掌握ARC不仅能够提高编码效率,还能显著提升应用的稳定性和性能,是iOS开发不可或缺的重要技能之一。

    iOS 5 arc 指南

    - **Block与ARC**:在使用Block时需要注意,Block可能会捕获Strong引用,导致循环强引用。为了处理这种情况,通常需要使用Weak指针来避免。 - **Singleton与ARC**:在ARC环境下处理Singleton模式时需要注意,应使用...

    iOS Block使用教程

    - 对于ARC环境下,可以使用`weakSelf`和`strongSelf`技巧来安全地访问self。 8. **BlockDemo示例分析** - "BlockDemo"项目可能包含了简单的网络请求示例,使用Block处理请求的响应。 - 可能包括创建网络请求对象...

    iOS block使用总结

    在ARC下,Block默认会保持对它引用的所有对象的强引用。 9. **Block的Copy行为** 当Block作为方法参数或赋值给对象属性时,系统会自动执行Block的copy操作。这意味着Block会被从栈复制到堆上,确保其生命周期与...

    iOS 5.0 ARC开发详细解读

    ### iOS 5.0 ARC开发详细解读 #### 引言 随着iOS 5.0的发布,Apple引入了一项重大的技术改进——自动引用计数(Automatic Reference Counting, 简称ARC)。这一特性极大地简化了Objective-C语言中的内存管理方式,...

    iOS Block 的使用, 包括传值, 基本用法

    由于Block会捕获并持有其定义时的引用,因此可能导致循环引用,尤其是在ARC(Automatic Reference Counting)环境下。为了避免循环引用,可以使用弱引用`__weak`或强引用`__strong`来管理Block内的对象引用。 ### 7...

    iOS block实现,内存管理

    在iOS和OS X开发中,Block常用于异步操作的回调、并发处理等场景。本文将深入探讨Block的实现以及与内存管理的关系。 Block可以视为匿名函数,它们在C语言的基础上进行了扩展。在Objective-C中,Block主要有以下几...

    ARC完全指南ios

    虽然ARC是在iOS5中引入的,但在某些情况下,开发者可能希望在较旧版本的iOS上使用ARC。这需要开发者在编译时指定兼容性标志,并确保所有使用的框架都支持ARC。 #### ARC高级指南 除了基本的内存管理外,ARC还提供...

    《Ios组件与框架-iOS SDK 高级特性刨析》代码 全部之ARC部分

    本资源“《Ios组件与框架-iOS SDK 高级特性刨析》代码 全部之ARC部分”提供了一套详细探讨ARC的代码示例,帮助开发者深入理解并熟练运用这一技术。 **1. ARC的基本概念** ARC是一种自动管理对象生命周期的机制。在...

    ARC到底帮我们做了哪些工作?(v1.3)

    **自动引用计数(Automatic Reference Counting,简称ARC)是iOS和macOS开发中的一个关键技术,它极大地简化了内存管理。在本篇博客Demo源码中,我们将深入探究ARC是如何帮助开发者自动处理对象的生命周期,确保内存...

    ios-深入了解Block.zip

    - **堆Block**:当Block被赋值给一个强引用(如全局变量或对象属性),或者作为参数传递时,Block会被复制到堆上,需要通过ARC进行内存管理。 3. **Block捕获变量**: Block可以捕获和使用定义在其外部的变量,...

    《Ios组件与框架-iOS SDK 高级特性刨析》代码 全部之NO-ARC部分

    5. **Block和内存管理**:非ARC下,理解block如何捕获和持有其内部引用的对象,以及如何避免由此产生的内存问题至关重要。 6. **单例模式**:非ARC中的单例实现通常需要更多的内存管理考虑,以确保单例对象在适当的...

    ios block学习总结demo

    2. Heap Block:如果Block需要长期存在或被其他对象引用,它会被复制到堆上,由ARC(Automatic Reference Counting)自动管理。 五、Block与GCD结合使用 1. GCD的队列:`dispatch_queue_t`提供了串行队列和并行...

    block的简单使用

    3. 自动引用计数(ARC)与强引用循环:Block会自动捕获并持有其定义范围内的对象,可能导致强引用循环。为避免这种情况,可以使用`__weak`或`__block`修饰符来弱引用或修改捕获的对象。 三、Block的类型与内存管理 ...

    swift-iOS中Block的用法举例解析与底层原理

    此外,Block会遵循ARC(Automatic Reference Counting)机制管理内存。如果Block内部没有引用外部对象,那么这个Block会被视为栈Block;如果有引用,Block会被置于堆中,需要手动管理生命周期。 总结,Swift中的...

    详解iOS应用开发中的ARC内存管理方式

    此外,了解`@autoreleasepool`的工作方式,以及如何在Block中正确处理内存,都是成为优秀iOS开发者必备的知识。 总之,理解并熟练掌握ARC是iOS开发的基础,能帮助开发者编写更高效、更稳定的代码。通过合理使用各种...

    IOS应用源码之采用ARC-Blocks-GCD封装的网络下载类库.zip

    这个压缩包文件"IOS应用源码之采用ARC-Blocks-GCD封装的网络下载类库.zip"提供了使用ARC(Automatic Reference Counting)、Blocks和GCD(Grand Central Dispatch)技术封装的网络下载类库。这三种技术在iOS开发中...

    block源码文件

    在ARC(Automatic Reference Counting)环境下,这些操作通常是自动进行的。 此外,Block的类型定义使用^关键字,例如^(int num)表示一个接受一个整型参数并返回无类型的Block。Block中的语法结构可以包含任意的...

Global site tag (gtag.js) - Google Analytics