本文转载自http://www.jianshu.com/p/c6ca540861d9 关于Block内部要不要使用weakSelf的几种情况 我们知道当对block使用不当时会造成循环引用导致内存泄露,这里列出几种使用block到底会不会引起循环引用的例子,通过重写控制器dealloc,当控制器被pop看有没有调用来判断. block是控制器的属性,如果block内部没有使用weakSelf将会造成内存泄露 self.testBlock = ^() { NSLog(@"%@",self…
场景:当你在某个界面请求网络数据的时候,用户不愿意等待点击了返回按钮,此时在Block当中用如下的方式使用weakSelf的话,有可能会奔溃(因为在并发编程的情况下,虽然在if判断的时候weakself不为空,但是不保证if语句里面的weakself不为空),所以为了安全起见要加上strongSelf(参考). if (weakSelf != nil) { // last remaining strong reference released by another thread. // weak…
问题 我们知道,在使用 block 的时候,为了避免产生循环引用,通常需要使用 weakSelf 与 strongSelf,写下面这样的代码: __weak typeof(self) weakSelf = self; [self doSomeBlockJob:^{ __strong typeof(weakSelf) strongSelf = weakSelf; if (strongSelf) { ... } }]; 那么请问:什么时候在 block 里面用 self,不需要使用 weak sel…
SDWebImage 中有一段源码: #if SD_UIKIT Class UIApplicationClass = NSClassFromString(@"UIApplication"); BOOL hasApplication = UIApplicationClass && [UIApplicationClass respondsToSelector:@selector(sharedApplication)]; if (hasApplication &&am…
来自李明杰的视频. block 用来保存一段代码 block 的标志:^ block  跟函数很像: 1).可以保存代码  2).有返回值  3). 有形参 temp1:没有返回值.没有形参的 block 如果 block 没有形参,可以省略 () void(^myblock)() = ^{ NSLog(@"----------"); NSLog(@"----------"); }; // 利用 block 变量调用 block 内部的代码 myblock(); t…
Block :block 实际上就是 Objective-C语言对闭包的实现 闭包(Closure):闭包就是一个函数,或者一个指向函数的指针,加上这个函数执行的非局部变量.闭包允许一个函数访问声明该函数运行上下文中的变量,甚至可以访问不同运行上文中的变量. 1 block 的原型 和 定义 *block的 原型: int  ( ^ sumblock ) ( int , int ); 上面的代码声明了一个block(^)的原型,名字叫做 sumblock,包含两个 int 型的参数,返回值为 i…
一):block学习总结 block :用来保存一段代码. 1.block 特点:  1> Block封装了一段代码,可以在任何时候执行   2> Block可以作为函数或者函数的返回值,而其本身又可以带输入参数或返回值  3> 苹果官方建议尽量多用block,在多线程.异步任务.集合遍历.集合排序.动画转场用的很多  4> Block可以在程序运行时凭空产生一个代码保存起来  2.block的标志:^  3.block跟函数很像 1> 可以保存代码  2> 有返回值 …
block与函数类似:1.可以保存代码 2.又返回值 3.有形参 4.调用方式一样 block的标志:^ 一.定义一个无参无返回值的block void (^myBlock)();--1.void 代表这个block变量没有返回值 2.最右边的括号(),代表block的参数,没有参数的话就为空 3.中间的括号中^是block的标志,myBlock是block变量的名字 二.定义一个接收两个int类型数据返回int类型的block int (^myBlock)(int,int); 代码示例: //…
// // main.m // block基本使用 // // Created by Ymmmsick on 15/7/21. // Copyright (c) 2015年 Ymmmsick. All rights reserved. // #import <Foundation/Foundation.h> typedef int (^IntBlock)() ; typedef void (^VoidBlock)(); int main(int argc, const char * argv[…
Block 它是iOS于4.0新的程序语法之后,于iOS SDK 4.0之后,block应用几乎无处不在. 在其他语言中也有类似的概念,称为闭包(closure),实例object C兄弟swift 中闭包(swift 闭包具体解释)的使用跟 OC的block一样重要.总的来说: Block是C语言的 Block是一个数据类型 Block 是一个提前准备好的代码.在须要的时候运行 1. block作用: Block用来封装一段代码,能够在不论什么时候运行: Block能够作为函数參数或者函数的返…