block数据类型

//

//  main.m

//  04-block数据类型

//

//  Created by apple on 14-3-18.

//  Copyright (c) 2014年 apple. All rights reserved.

//

#import <Foundation/Foundation.h>

#import "Calculate.h"

//数据类型

//1.作为参数传递

//2.作为函数的返回值

//3.声明成变量

void test()

{

NSLog(@"test");

}

int sum(int a, int b)

{

return a + b;

}

int main(int argc, const char * argv[])

{

@autoreleasepool {

//int 4 float double 8 char

//更加合理的分配内存空间

int ca =10;

//对象类型 NSObject * obj

//id

//BOOL

//block 指向函数的指针比较像

//SEL

/*

void (*myPoint)() = test;

myPoint();

*/

//block就是弥补了 指向函数的指针,不能够直接保存一个函数体(代码块)

/*

void (^myBlock)() = ^{

NSLog(@"test");

};

myBlock();

int (^sumBlock)(int a, int b) = ^int (int a, int b) {

return a + b;

};

int result = sumBlock(10,20);

NSLog(@"result = %d",result);

*/

//如果想要改变,block代码块之外的变量值,就必须在变量前加入

//__block关键字

__block int x = 0;

int (^sumBlock)(int a, int b) = ^int (int a, int b) {

int result = (a * b);

x = result;

return result;

};

NSLog(@"x = %d",x);//注意代码运行先后顺序  输出0;

//当在开发中,你发现一个方法中的算法,可以有多种实现,你一时还不能确定用哪种更好,你就可以吧方法中其中一个参数定义成block方式

//

Calculate * cal = [[Calculate alloc] init];

int sum = [cal calculateWithNumber1:10 andNumber2:20 andCalculate:sumBlock];

NSLog(@"sum = %d",sum);

NSLog(@"x = %d",x);//注意代码运行先后顺序  输出200;

}

return 0;

}

//

//  Calculate.h

//  02-OC中特有的一些语法

//

//  Created by apple on 14-3-18.

//  Copyright (c) 2014年 apple. All rights reserved.

//

#import <Foundation/Foundation.h>

typedef int (^calculateBlock)(int a,int b);

@interface Calculate : NSObject

- (int)calculateWithNumber1:(int)number1 andNumber2:(int)number2 andCalculate:(calculateBlock)calculate;

@end

//

//  Calculate.m

//  02-OC中特有的一些语法

//

//  Created by apple on 14-3-18.

//  Copyright (c) 2014年 apple. All rights reserved.

//

#import "Calculate.h"

@implementation Calculate

/*

- (int)calculateWithNumber1:(int)number1 andNumber2:(int)number2

{

//    return number1 + number2;

//    return number1 - number2;

//    return number1 * number2;

//    return number1 / number2;

}

*/

- (int)calculateWithNumber1:(int)number1 andNumber2:(int)number2 andCalculate:(calculateBlock)calculate

{

//经常变化的功能,在设计当中叫做封装变化

return calculate(number1,number2);

}

@end

时间: 2024-10-13 22:23:50

block数据类型的相关文章

小白学开发(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(

12-Objective-C特有语法:(高效率)block数据类型

一.         基本简介 block用来保存一段代码  block的标志:^ block可以作为函数参数或者函数的返回值,而其本身又可以带输入参数或返回值. 苹果官方建议尽量多用block.在多线程.异步任务.集合遍历.集合排序.动画转场用的很多 block跟函数很像: 1.可以保存代码 2.有返回值 3.有形参 4.调用方式一样 (和函数又有区别,函数是在编译之前就已经定义好了,是写死了的东西,而block在运行时可以凭空的产生一段运行代码) 二.        Block的特性 blo

Objective-C Block数据类型 @protocol关键字

Block数据类型 Block封装了一段代码 可以在任何时候执行 Block可以作为函数参数或者函数的返回值 而其本身又可以带输入参数或返回值 苹果官方建议尽量多用Block 在多线程 异步任务 集合遍历 集合排序 动画转场用的很多 定义Block变量 void (^myBlock) (); int (^sunBlock) (int, int); 利用Block封装代码 ^ { NSLog(@"=========="); }; ^() { NSLog(@"=========&

【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,注意^以及末尾的分号;右边的函数体也

OC中分类、类扩展、Block、协议(由协议引出的代理模式)

一: 分类(Category) 1>Category的概念:就是在不改变原来类的基础上,为类增加一些方法 (1,可以为库中定义的类增加方法:2,可以给自己定义的类增加方           法)仅仅是方法哦 好处:一个类可以有多个文件,编译器会将这些文件按一个类除了,便于团队合作. 2> 代码格式: 自定义类中加分类 Person类 #import "Person.h" @interface Person : NSObject - (void)sayHi; @end @im

OC中的Block数据类型和protocol

Block数据类型 作用:封装一段代码,可以再任何地方执行. 定义格式:返回值类型 (^变量名)(传入的形参的数据类型) = ^(传入代码块的参数){代码块}; 调用方法:变量名(实参): block其实与函数差不多,他们的相同之处有: 1.都可以保存代码 2.都可以有返回值 3.都有形参和实参 4.调用方式一样 使用注意: 1.Block内部可以访问外面的成员变量 2.默认情况下,Block内部不能修改外面的局部变量 3.如果一定要在Block内部修改外面的局部变量,可以再该局部变量前加__b

block的定义和内存

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

Objective-C中的Block

1.相关概念 在这篇笔记开始之前,我们需要对以下概念有所了解. 1.1 操作系统中的栈和堆 注:这里所说的堆和栈与数据结构中的堆和栈不是一回事. 我们先来看看一个由C/C++/OBJC编译的程序占用内存分布的结构: 栈区(stack):由系统自动分配,一般存放函数参数值.局部变量的值等.由编译器自动创建与释放.其操作方式类似于数据结构中的栈,即后进先出.先进后出的原则. 例如:在函数中申明一个局部变量int b;系统自动在栈中为b开辟空间. 堆区(heap):一般由程序员申请并指明大小,最终也由

Objective-C中的Block[转]

1.相关概念 在这篇笔记开始之前,我们需要对以下概念有所了解. 1.1 操作系统中的栈和堆 注:这里所说的堆和栈与数据结构中的堆和栈不是一回事. 我们先来看看一个由C/C++/OBJC编译的程序占用内存分布的结构: 栈区(stack):由系统自动分配,一般存放函数参数值.局部变量的值等.由编译器自动创建与释放.其操作方式类似于数据结构中的栈,即后进先出.先进后出的原则. 例如:在函数中申明一个局部变量int b;系统自动在栈中为b开辟空间. 堆区(heap):一般由程序员申请并指明大小,最终也由