block的用法和循环引用】的更多相关文章

一.block在OC中的用法可以分为大概一下几种. 1>用于成员属性,保存一段代码,可以替代代理传值. 比如说,创建一个ViewController控制器,点击屏幕就跳转到ModalViewController控制器里的时候,不用代理用block实现一些功能: // 在ModalViewController.h文件里声明: @property (nonatomic, strong) void(^valueBlock)(NSString *data); //在ModalViewController…
在ARC与非ARC环境下对block使用不当都会引起循环引用问题,一般表现为,某个类将block作为自己的属性变量,然后该类在block的方法体里面又使用了该类本身,简单说就是self.theBlock = ^(void){[self dosomething];或者self.otherVar = XXX;或者_otherVar = ...};block的这种循环引用会被编译器捕捉到并及时提醒,那要如何避免呢,我在这里做了个demo测试. 直接看demo #import "ViewControll…
使用 weak–strong dance 技术 block 可以直接引用 self,但是要非常小心地在 block 中引用 self.因为在 block 引用 self,可能会导致循环引用.如下例所示: @interface KSViewController () { id _observer; } @end @implementation KSViewController - (void)viewDidLoad { [super viewDidLoad]; // Do any addition…
引言 使用block已经有一段时间了,感觉自己了解的还行,但是几天前看到CocoaChina上一个关于block的小测试主题: [小测试]你真的知道blocks在Objective-C中是怎么工作的吗?,发现竟然做错了几道, 才知道自己想当然的理解是错误的,所以抽时间学习了下,并且通过一些测试代码进行测试,产生这篇博客. Block简介(copy一段) Block作为C语言的扩展,并不是高新技术,和其他语言的闭包或lambda表达式是一回事.需要注意的是由于Objective-C在iOS中不支持…
http://blog.csdn.net/felix9/article/details/9619313 在实际开发中,发现使用Block有着比delegate和notification更简洁的优势.于是在目前的项目中大量的使用block. 在我的头文件我是这样声明使用block的. @interface BrushViewController : BaseViewController @property (nonatomic, copy) void (^getCardInfo)(NSDictio…
在实际开发中,发现使用Block有着比delegate和notification更简洁的优势.于是在目前的项目中大量的使用block. 在我的头文件我是这样声明使用block的. 我将block声明为copy的原因是在代码块里面我可能会使用一些本地变量.而block一开始是放在栈上的,只有copy后才会放到堆上. 如果加copy属性,当其所在栈被释放的时候,这些本地变量将变得不可访问.一旦代码执行到block这段就会导致bad access. 像上面这段代码,self其实是一个本地变量而不是bl…
Block是一个很好用的东西,这篇文章主要来介绍:1.什么是Block?2.Block的使用?3.Block的循环引用问题及解决. 1.什么是Block? 说这个问题之前,我先来说一下闭包(Closure).闭包就是一个函数,或者一个指向函数的指针,加上这个函数执行的非局部变量.说的通俗一点,就是闭包允许一个函数访问声明该函数运行上下文中的变量,甚至可以访问不同运行上文中的变量. Block实际上就是OC语言对闭包的实现. 下面声明一个Block: int (^Sum)(int, int); 首…
在ARC(自动引用技术)前,Objective-c都是手动来分配释放 释放 计数内存,其过程非常复杂. ARC技术推出后,貌似世界和平了很多,但是其实ARC并不等同于Java或者C#中的垃圾回收,ARC计数只是在XCode在编译的时候自动帮我们加上了释放 计数+1 计数-1. 内存泄露例子: 然而在一些特殊的情况下,内存泄露依然存在,而且防不慎防,这里讲一下Objective-C中Block计数是如何产生内存泄露的,如下代码 .h中 typedef void (^CompletionBlock)…
在完成项目期间,不可避免的会使用到block,因为block有着比delegate和notification可读性更高,而且看起来代码也会很简洁.于是在目前的项目中大量的使用block. 之前给大家介绍了一下在开发的过程中使用到了代理以及block,并详细的介绍了一下delegate和block的相似之处.(如有兴趣可以去看我之前的文章         链接: http://www.cnblogs.com/MasterPeng/p/5210263.html) 主要是因为在开发的时候,有时候由于疏…
深入研究Block捕获外部变量和__block实现原理 EOCNetworkFetcher.h typedef void (^EOCNetworkFetcherCompletionHandler)(NSData *data); @interface EOCNetworkFetcher : NSObject @property (nonatomic, strong, readonly) NSURL *url; - (id)initWithURL:(NSURL *)url; - (void)star…