【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,注意^以及末尾的分号;右边的函数体也不再需要函数名称,只要前面有myBlock即可
    void (^myBlock)()=^{
        NSLog(@"hello");
    };
    //调用,和函数类似
    myBlock();

block于指向函数的指针的区别在于:后者只能在后面放一个函数名,而不能直接把函数的代码(函数体)整个放在后面。而前者弥补了这个缺陷,相当于把整个代码块“封装”在一起了。

(2)带有参数的block

    //定义block,注意^以及末尾的分号;
    int (^sum1)(int a,int b)=^int (int a,int b){
        return a+b;
    };
    //调用,和函数类似
    NSLog(@"%d",sum1(5,6));

(3)既然是数据类型,它也可以当做参数进行传递。

(4)如果需要在block代码中改变block外的变量,需要在该变量前面添加__block关键字。

时间: 2024-12-19 04:59:14

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

第五章 shell函数的定义、执行、传参和递归函数

第五章 shell函数的定义.执行.传参和递归函数 Bash(Bourne Again shell)也支持函数,在编写大型复杂脚本的时候,可以用函数把代码编写成一个一个功能相对独立的代码块,使代码模块块.结构清晰.有效的减少程序的代码量.但是bash shell是一种解释性语言,执行效率没有编译性语言高. shell函数的定义 格式一:( function name() { command sequence (命令序列) } 格式二: name() { command sequence (命令序

js方法之间的调用之——传参方法

在最近项目需求中发现,完成一些功能的时候总是要调很多结构类似的方法,写起来很繁琐,所以就想写一个“万能”方法,是的代码更简洁.即:把一个方法作为参数传给这个“万能”方法,让它去执行你给定的方法,就类似于ajax中success/error方法传参,总是传入一个方法体. ####1.将方法作为参数 代码: var a = function(){ console.info("我成功执行了..."); } var excuteFunc = function(funcName){ funcNa

C++下实现同接口下多个类作为参数的调用和传参

1 /* 2 实现同接口下不同类的对象的转移 3 定义类的接口 4 定义多个继承该接口的类 5 定义管理类,把接口当作类型, 6 传入该接口下各种类的对象,进行操作 7 */ 8 #include<iostream> 9 #include<map> 10 #include<cstdlib> 11 using namespace std; 12 template<typename keyType,typename valueType> 13 struct No

C# 如何调用可执行程序传参

/// <summary> /// LIS接口, 说是只要进界面就要一起启动他们的FTP,我也不懂是做什么的,反正按LIS的要求做呗 \ /// by weihf 2014-9-1 /// to weihf : 为了更新lis程序 /// /// </summary> /// <returns></returns> private void StarLisFTP() { try { System.Diagnostics.Process[] proc = Sy

O-C相关04:类方法的概述与定义和调用

类方法的概述与定义和调用 1, 类方法的概述 类方法(class method)在其他编程语言中常常称为静态方法(例如 Java 或 C# 等). 与实例方法不同的是,类方法只需要使用类名即可调用, 不需要引用对象, 也就不需要创建对象了. 而实例方法必须是先将对象(实例)创建出来, 再利用对象来调用方法. OC 中使用 "+" 表示类方法, 使用 "-" 表示实例方法. 类方法与实例方法的定义比较: 2, 类方法的定义 3, 使用类方法的优势分析: -> 类

小白学开发(iOS)OC_ block数据类型(2015-08-08)

// //  main.m //  block数据类型 // //  Created by admin on 15/8/12. //  Copyright (c) 2015年 admin. All rights reserved. // #import <Foundation/Foundation.h> #import "Calculate.h" //  定义一个函数 void test() { NSLog(@"test函数"); } int main(

OC语言Block

OC语言Block 一.Block (一)简介  Block是什么?苹果推荐的比较特殊的数据类型,效率高,在运行中保存代码.用来封装和保存代码,有点像函数,BLOCK可以在任何时候执行. Block和函数的相似性:(1)可以保存代码(2)有返回值(3)有形参(4)调用方式一样. Block的应用:(1)动画(2)多线程(3)集合遍历(4)网络请求回调 标识符 ^ (二)基本使用 (1)定义Block变量 Int (^SumBlock)(int,int);//有参数,返回值类型为int Void 

OC之Block的使用

一.Block定义 1.1定义 (1)Block是OC中的一种数据类型,在iOS开发中被广泛使用 (2)^是Block的特有标记 (3)Block的实现代码包含在{}之间 (4)大多情况下,以内联inline函数的方式被定义和使用 (5)Block与C语言的函数指针有些相似,但使用起来更加灵活 1.2示例代码 void(^demoBlock)() =^ { NSLog(@"demo"); }; int(^addBlock)(int, int) =^(int x, int y) { re

OC中Block语法、Block使用以及通过Block实现数组排序

Block:语法块,本质上是匿名函数(没有名称的函数) 标准C里面没有Block,C语言的后期扩展版本,加入了匿名函数 在C++.JS.Swift等语言有类似语法,叫做闭包 Block语法和C语言里的函数指针很相似,下面我们先来回顾下C语言中的函数和函数指针 C语言中函数是指:实现某一功能的代码段 完整的函数包括两部分:函数声明.函数定义 函数声明,即函数原型.例如:int sum (int x,int y);具有两个整形参数,一个整形返回值的函数 函数定义,即函数实现.例如:int sum(i