block 块实现传值

使用块(block)传值比较简单,并且用块写出来的代码更为整洁。

代码模拟:

声明文件:

#import <Foundation/Foundation.h>

typedef void (^GBCompletionHandler)(NSData* data, NSError *error);

@interface GBUpload : NSObject

/**
 *  upload data to some where
 *
 *  @param data             which to be upload
 *  @param completionHandle do some logic when upload finish.
 */
- (void) upload:(NSData*) data completionHandler:(GBCompletionHandler) completionHandle;

@end

实现文件:

#import "GBUpload.h"

@implementation GBUpload

- (void) upload:(NSData*) data completionHandler:(GBCompletionHandler) completionHandle {
    NSLog(@"uploading......");

    sleep(3);

    NSLog(@"upload success");

    if (completionHandle) {
        completionHandle(data, nil);
    }
}

@end

函数调用:

GBUpload *upload = [[GBUpload alloc] init];

    [upload upload:nil completionHandler:^(NSData *data, NSError *error) {
        if (error) {
            NSLog(@"upload failed");
        } else {
            NSLog(@"upload finish, update UI");
        }
    }];

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-08-06 20:04:46

block 块实现传值的相关文章

block 代码块 反向传值

block 代码块 也称作闭包 与C语言函数类似  具有反向传值.回调的功能 block公式分两种: ①声明和实现写到一块的公式 返回值类型(^block名字)(参数列表 参数类型 参数名) = ^(参数列表 参数类型 参数名){ 实现代码(如果有返回值 需要return 返回值类型的值) }; 调用:block名字(参数); ②声明和实现分开写的公式 (1)声明 返回值类型(^block名字)(参数列表); (2)实现 block名字 = ^(参数列表){ 实现代码(如果有返回值 需要retu

iOS之block块

Block块. 1.声明Block int (^myBlock)(int n) = ^(int num) 类型 (^名称)(需要传的参数)= ^(参数) 2 __block 变量 在block块中修改block块外部变量的值,只有将外部的变量前面加_ _(两个短杠才能修改) 3 __weak 变量 在ARC机制下,如果block中应用控制器对象或者其实例变量,block会对其强引用,导致拷贝一份控制器对象从而造成内存泄露.为了避免这一问题,则需要: __weak typeof(self)weak

【iOS】代理传值与块代码传值

主线程与子线程常常须要进行数据的传递.不同的类之间,不同的控制器之间都须要. 并且常常须要监听一个动作的完毕.而后才去做对应事件. (代理是一对一的关系). 一.代理传值 代理是一种设计模式. iOS中用的许多.能够通过自己定义代理来进行传值. 參见我的这篇文章 http://blog.csdn.net/xn4545945/article/details/31036523 在iOS中.托付方与被托付方都要实现3个步骤.(见代码凝视) 以下代码:模拟下载完毕后须要更新UI. 用代理来传值. XNU

Block回调和传值(干货)

如果你还在苦恼block的传值和回调,不妨看看这个Demo,自己整理的,希望对大家有帮助,这是下载地址 https://github.com/ShaoWenLe/BlockTestByValueAndCall-back.git 用的是storyboard结合Xib,如果看着不习惯,可以从上面链接下载源码 //第一界面 // ViewController.h // BlockTestByValueAndCall-back // // Created by 出神入化 on 15/8/15. // C

Linux内核系列之Block块层(一)

.Block块层入口函数为 genhd_device_init(),先对该函数开始分析: 函数实现源码: static int __init genhd_device_init(void) {     bdev_map = kobj_map_init(base_probe, &block_subsys_lock);     blk_dev_init();     subsystem_register(&block_subsys);     return 0; }   .kobj_map_i

ARC中block块作为属性的使用笔记

ARC中block块作为属性的使用笔记 block较难理解,根据在内存中的分布情况就分为3种类型,根据使用的情形又分为很多很多种.虽然用起来容易,但使用不当会造成内存泄露,虽然都是这么说,但你真的研究过为什么会泄露吗?为什么有些时候外部变量进入block的时候会导致引用计数+1呢? 本人做过MRC以及ARC的开发,但大势所趋,ARC将是以后开发的主要模式,即使有MRC也是ARC混编MRC的代码,所以,本文的block的一些使用上的心得都基于ARC的,已经不考虑MRC的了,请看官注意,MRC与AR

【学习ios之路:Objective-C】block块语法.NSDate和NSDateFormatter

一.Block块语法 块语法:可以在函数内部定义匿名函数 格式: ^返回值类型(参数列表){函数体}其中返回值类型可以省略 block简单练习: ①.求两个数的最大值 //int (^)(int,int)//block类型 int (^max)(int,int) = ^(int a,int b) {//block的实现体 return a > b ? a : b; }; int value = max(4,6);          printf("%d",value); ②.将一

Objective-c中的Block(块)详解

Block初探 在Objective-c中NSArray是很常用的容器之一,很多时候我们需要对数组中的数据进行排序,因此与下面类似的代码会经常碰到: NSArray *sortedArray = [array sortedArrayUsingComparator: ^(id obj1, id obj2) { if ([obj1 integerValue] > [obj2 integerValue]) { return (NSComparisonResult)NSOrderedDescending

「ios」block块中使用self

[问题现象] 在block块中使用self时报警告:self strongly in this block is likely to lead to a retain cycle [问题解决] __block ViewController *blockSelf = self;_block = ^{ [blockSelf->_items addObject:@"Hello!"];};