block的定义及使用

(1)最基础的用法案例,我们可以把block理解为一段类似变量一样的可执行函数代码片段:

void (^printBlock)(NSString *x);

printBlock = ^(NSString* str)

{

   NSLog(@"print:%@", str);

};

printBlock(@"hello world!");

(2)由于是变量,所以比方法等可以更灵活的使用,因为可以把block当做一个变量传入到另一个方法。

- (void)viewDidLoad {

[super viewDidLoad];

  NSLog(@"我在玩手机");

   NSLog(@"手机没电了");

[self chargeMyIphone:^{

  NSLog(@"去逛街");

}];

 NSLog(@"我在看电视");

}

-(void)chargeMyIphone:(void(^)(void))finishBlock {

      dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(110 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{

          NSLog(@"电充好了");

          finishBlock();

      });

  }

(3)上述方法是在单个类中执行的,如果在两个类中使用就能更加显现出其功能。可以用来取代代理,可以是逻辑变得清晰。如此处模拟一个发送HTTP请求的类。

#import <Foundation/Foundation.h>

typedef void(^HttpSendBlock)(NSDictionary *dict);  @interface HttpReq : NSObject

-(void)sendHttpReqUseUrl:(NSString*)url withBlock:(HttpSendBlock) block;

@end

时间: 2024-10-06 09:11:06

block的定义及使用的相关文章

block的定义和内存

1.2 结构体(Struct) 在C语言中,结构体(struct)指的是一种数据结构.结构体可以被声明为变量.指针或数组等,用以实现较复杂的数据结构.结构体同时也是一些元素的集合,这些元素称为结构体的成员(member),且这些成员可以为不同的类型,成员一般用名字访问. 我们来看看结构体的定义: 1 struct tag { member-list } variable-list; struct:结构体关键字. tag:结构体标签. member-list:结构体成员列表. variable-l

ios影视项目解析 主要为讲block的细节 如果了解了 block的定义等 但是对运用不是很熟悉可以参考本文章

源于github上的影视项目解析 此项目在4app  和  github上都可以下载 项目截图: 此处为程序刚运行界面 程序应有一个discover控制器 找到discover控制器,然后可以根据项目的流程熟悉此项目的原理,从而学习到他们的架构思想 1 - (void)setupTableView 2 { 3 if (!_refreshControl) 4 { 5 _refreshControl = [[UIRefreshControl alloc] initWithFrame:CGRectMa

Swift入坑--block的定义

typealias methodCompletionBlock = (String)->Void

Block的声明与定义语法

Block的声明 Block的声明与函数指针的声明类似 返回值类型(^变量名)(参数列表) Block的定义 ^返回值类型(参数列表) { 表达式 } 其中: 1 如果返回值类型是void,可以省略 2 如果参数列表是void,可以省略

【OC加强】block数据类型的定义和调用以及传参等应用

(1)指向函数的指针的定义方法和调用: #import <Foundation/Foundation.h> void test(){ NSLog(@"hello"); } int main(int argc, const char * argv[]) { @autoreleasepool { //定义 void (*p1)()=test; //使用 p1(); } return 0; } 而block的定义与之类似. //定义block,注意^以及末尾的分号;右边的函数体也

新浪微博客户端(34)-block的细节与本质

main.m #import <Foundation/Foundation.h> void test4(); int main(int argc, const char * argv[]) { @autoreleasepool { test4(); } return 0; } // 普通的局部变量,block只会引用它初始的值(block定义那一刻),不能跟踪变量的改变 void test1() { int i = 10; void (^next)() = ^{ printf("当前

由浅至深学习block

关于block 在iOS 4.0之后,block横空出世,它本身封装了一段代码并将这段代码当做变量,通过block()的方式进行回调.这不免让我们想到在C函数中,我们可以定义一个指向函数的指针并且调用: bool executeSomeTask(void) {     //do something and return if success or not } bool (*taskPoint)(void); taskPoint = something; 上面的函数指针可以直接通过(*taskPo

iOS block的用法

转自:http://www.cnblogs.com/jy578154186/archive/2012/09/30/2709130.html 本文来自台湾的某开发人员的博客,被墙,感觉讲的比较易懂,所以引过来.文字简体化了,原来是繁体,变数=变量,这个注意一下. 本文的顺序是层层深入的,要想简单的了解,只看X.1 初探Block就好了 本章学习目标: 1. 了解何谓block. 2. 了解block的使用方法. Block 是iOS在4.0之后新增的程式语法,严格来说block的概念并不算是基础程

iOS中Block的基础用法

本文简介 本章不会对Block做过多的实现研究.只是讲解基本的用法.纯粹基础知识.结合实际项目怎么去做举例.Block使用场景,可以在两个界面的传值,也可以对代码封装作为参数的传递等.用过GCD就知道Block的精妙之处. Block简介 Block是一种比较特殊的数据类型.它可以保存一段代码,在合适的时候取出来调用. Block的修饰 ARC情况下1.如果用copy修饰Block,该Block就会存储在堆空间.则会对Block的内部对象进行强引用,导致循环引用.内存无法释放.解决方法:新建一个