iOS 使用Block实现函数回调

其实,iOS中的Block就是C++中的函数指针,实现方式都是一样的,下面贴出一个简单的实践。

首先,创建一个回调的类

BlockStudy.h

//
//  BlockStudy.h
//  BlockStudy
//
//  Created by 杜甲 on 11/11/14.
//  Copyright (c) 2014 杜甲. All rights reserved.
//

#import <Foundation/Foundation.h>

@interface BlockStudy : NSObject

typedef void (^TestBlock)();
@property (nonatomic , strong) TestBlock testBlock;

- (void)StartBlock;
@end

BlockStudy.m

//
//  BlockStudy.m
//  BlockStudy
//
//  Created by 杜甲 on 11/11/14.
//  Copyright (c) 2014 杜甲. All rights reserved.
//

#import "BlockStudy.h"

@implementation BlockStudy

- (void)test
{
    if (_testBlock) {
        _testBlock();
    }
}

- (void)StartBlock
{
    [self performSelector:@selector(test) withObject:nil afterDelay:2.0];
}

@end

调用类ViewController.m

//
//  ViewController.m
//  BlockStudy
//
//  Created by 杜甲 on 11/11/14.
//  Copyright (c) 2014 杜甲. All rights reserved.
//

#import "ViewController.h"
#import "BlockStudy.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    BlockStudy *block = [[BlockStudy alloc] init];
    block.testBlock = ^()
    {
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Block学习" message:@"测试成功" delegate:self cancelButtonTitle:@"取消吧" otherButtonTitles:@"OK", nil];
        [alert show];

    };
    [block StartBlock];
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

@end
时间: 2024-10-29 19:06:15

iOS 使用Block实现函数回调的相关文章

iOS中block的用法 以及和函数用法的区别

ios中block的用法和函数的用法大致相同 但是block的用法的灵活性更高: 不带参数的block: void ^(MyBlock)() = ^{}; 调用的时候  MyBlock(); 带参数的block: int ^(MyBlock)(int,int) = ^(int a,int b){return a+b;} 调用MyBlock(5,6); 将block当作某个类的属性的写法 typedef void (^BlockOption)(); @property (nonatomic,ass

iOS之Block

iOS中的Block机制,可以简化程序,实现回调功能.跟C语言中的函数指针类似.可以通过传递Block实现函数的回调处理. 简单地例子: 定义一个block int(^myblock)(int a, int b); 解释:定义了一个block,名称是myblock(类似函数指针),它的返回类型是int,传入2个int型的a,b的参数. 定义函数指针具体要做的内容.(函数体) myblock = ^(int a, int b){ retrun a+b; }; 解释:定义了myblock的具体功能,

iOS 中Block以及Blocks的使用

一.ios中block的使用 Block可以帮助我们组织独立的代码段,并提高复用性和可读性.iOS4在UIKit中引入了该特征.超过100个的Apple API都使用了Block,所以这是一个我们必须开始熟悉的知识. Block是什么样的? 你可以使用^操作符来声明一个Block变量,它表示一个Block的开始. int num1 = 7; int(^aBlock)(int) = ^(int num2) { return num1+nunm2; }; 在如上代码中我们将Block声明为一个变量,

iOS之block浅谈

前言 ios4.0系统已开始支持block,在编程过程中,block被Obj-C看成是对象,它封装了一段代码,这段代码可以在任何时候执行.block可以作为函数参数或者函数的返回值,而其本身又可以带输入参数或返回值.它和传统的函数指针很类似,但是有区别:block是inline的,并且它对局部变量是只读的. block和函数的相似性:(1)可以保存代码(2)有返回值(3)有形参(4)调用方式一样. block的使用 1.block的定义 // 声明和实现写在一起,就像变量的声明实现 int a

iOS中-Block使用

Block对象是 C 级别的语法和运行时特性.它们和标准 C 函数很类似,但是除了可执行代码外,它们还可能包含了变量自动绑定(栈)或内存托管(堆).所以一个block维护一个状态集(数据),它们可以在执行的时候用来影响程序行为. 你可以用 blocks来编写函数表达式,这些表达式可以作为 API 使用,或可选的存储,或被多个线程使用.Blocks作为回调特别有用,因为block携带了进行回调所需要的执行代码和执行过程中需要的数据. Blocks在GCC和Clang里面可用,它附带在 Mac OS

iOS中Block的用法,举例,解析与底层原理(这可能是最详细的Block解析)

[摘要]这篇文章,首先在第1节中介绍Block的定义,以及与C里面函数的对比.然后,第2节介绍实际开发中经常会用到的Block语法形式,以供读者日后查阅.只知道怎么用却不知什么时候用?所以随后的第3节将介绍Block的应用场景.然而,用Block不当导致了Crash?所以,第4节有必要了解Block捕获变量的特性,以及循环引用的解决.另外,千万不要懒,一碰到Block就weak,要区分哪些不会引起循环引用.然而,如果对Block的内存机制不熟悉,也会导致Crash,所以第5节会介绍Block的内

iOS中block类型大全

iOS中block类型大全 typedef的block 作为属性的block 作为变量的block 作为方法变量入参的block 作为方法参数的block 无名block 内联函数的block 递归调用的block 作为方法返回值的block 作为函数名的block(太过奇葩,完全不知道怎么用-_-!) iOS中block类型大全,码迷,mamicode.com

iOS中Block介绍(一)基础

ios开发block的使用指南,以及深入理解block的内存管理,也适用于osx开发.讨论范围:block的使用,内存管理,内部实现.不包含的内容:gc arc下的block内存,block在c++中的使用. AD: 一.概述 Block是C级别的语法和运行时特性.Block比较类似C函数,但是Block比之C函数,其灵活性体现在栈内存.堆内存的引用,我们甚至可以将一个Block作为参数传给其他的函数或者Block. 二.热身 先看一个比较简单的Block例子: int multiplier =

iOS开发——Block引起循环引用的解决方案

内存问题始终是软件开发中的头等大事,iOS开发中也不例外,在面试中也是必问的问题.今天我们主要来讲讲Block中涉及的循环引用问题.当我们自己一开始写代码的时候,可能会大量在block中使用self,但是当看到别人优秀的代码的时候,发现别人常常不是用self,而使用weakSelf. 为什么呢?本文的示例代码上传至 https://github.com/chenyufeng1991/Block_WeakSelf . 首先我先来说说内存管理的原则: 1.默认使用strong,可选weak.stro