小白学开发(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(int argc,
const char * argv[]) {

@autoreleasepool {

/*

数据类型的作用:
是为了更加合理的分配内存空间

数据类型的功能特点:

1. 作为參数传递

2. 作为函数返回值】

3. 声明变量

OC中的数据类型:

1. 对象类型(NSObject * obj)

2. id

3. BOOL

4. block

5. SEL

6. 基本数据类型

*/

//  注意:block数据类型
和 指向函数的指针类似

//  指向函数的指针例如以下:

int (*myPoint)() =
test;

myPoint();     //  
这里就能够通过指针来调用test函数

//  注意:然而指向函数的指针不能直接指向函数即一个代码块,必须通过函数名来指向

//       block就是弥补了这一点,可以直接保存一个函数体(代码块)

void (^myBlock)() = ^{

NSLog(@"jajajaj");

};                    
// 这里myBlock就代表后面括号里的代码块

myBlock();

//  也能够传入參数,有返回值

/*

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

return a + b;

};

int result = sumBlock(10, 20);

NSLog(@"%d", result);

*/

//  block作为參数传递(block实际指向的是一个函数或者代码块,那么将这个函数或代码块作为參数传递)

//  使用场景:当在开发中,你发现一个方法中的算法,能够有多种实现,你一时还不能确定用哪种更好,你就能够吧方法中当中一个參数定义成block方式

/*

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

return a - b;

};

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

int jian = [cal calculateWithNumber1:10 andNumber2:20 andCalculate:jianBlock];

NSLog(@"%d",jian);

*/

//  注意:假设在作用域范围之内,block是能够使用变量的,可是要在block代码块中改变非块中变量的值就要在变量前加__block

//        int x =0;

__block int x =
0;

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

int result = (a + b) + x;  
//  这个是正确的

x = result;  
//这里就必需要求在定义x的时候前加__block

return result;

};

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

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

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

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

}

return 0;

}

//

//  Calculate.h

//  OC的特有语法

//

//  Created by admin on 15/8/12.

//  Copyright (c) 2015年 admin. All rights reserved.

//

#import <Foundation/Foundation.h>

//  创建一个别名为calculateBlock的block。返回值为int。有两个int类型的參数,这里与指向函数的指针类似

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

@interface Calculate :
NSObject

//  将block作为參数传入

//  这个函数的作用是计算两个数的加减乘除等运算,前两个參数是运算的数字。block类型的第三个參数的计算方法

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

@end

//

//  Calculate.m

//  OC的特有语法

//

//  Created by admin on 15/8/12.

//  Copyright (c) 2015年 admin. All rights reserved.

//

#import "Calculate.h"

@implementation Calculate

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

{

return calculate(number1, number2);

}

@end

时间: 2024-12-28 09:21:34

小白学开发(iOS)OC_ block数据类型(2015-08-08)的相关文章

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

// //  main.m //  SEL数据类型 // //  Created by admin on 15/8/12. //  Copyright (c) 2015年 admin. All rights reserved. // #import <Foundation/Foundation.h> #import "Person.h" /* SEL数据类型,使用来包装方法的 */ int main(int argc, const char * argv[]) { @aut

小白学开发(iOS)OC_ @property 参数(2015-08-05)

// //  Person.h //  手动内存管理 // //  Created by admin on 15/8/5. //  Copyright (c) 2015年 admin. All rights reserved. // #import <Foundation/Foundation.h> #import "Car.h" @interface Person : NSObject /* @property 参数的作用 1. 生成set和get方法的声明 2. 生成s

小白学开发(iOS)OC_ 字符串的比较判断(2015-08-12)

// //  main.m //  字符串的比较判断 // //  Created by admin on 15/8/13. //  Copyright (c) 2015年 admin. All rights reserved. // #import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { @autoreleasepool { //  1. 判断字符串是否为空 NSString *str = @&q

小白学开发(iOS)OC_基本数据类型转换成字符串(2015-08-12)

// //  main.m //  基本数据类型转换成字符串 // //  Created by admin on 15/8/13. //  Copyright (c) 2015年 admin. All rights reserved. // #import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { @autoreleasepool { //      基本数据类型:(int float,double

小白学开发(iOS)OC_ 使用继承来扩充类(2015-08-07)

// //  main.m //  使用继承来扩充类 // //  Created by admin on 15/8/12. //  Copyright (c) 2015年 admin. All rights reserved. // /* 当在一个类中有太多的方法会显得非常复杂,为了清楚表示,我们可以创建类的一个分类(category)来扩充这个类 在其他面向对象语言中,使用继承关系类扩充一个类,然而这样最大的坏处就是耦合性太高 OC使用(category)来扩充一个类 注意:1. 只要在原类

小白学开发(iOS)OC_ protocol(协议) (2015-08-09)

// //  main.m //  protocol(协议) // //  Created by admin on 15/8/12. //  Copyright (c) 2015年 admin. All rights reserved. // #import <Foundation/Foundation.h> #import "Person.h" #import "Student.h" /* 1. 什么是协议: >  协议实际上是一种向上抽象的思想

小白学开发(iOS)OC_ 字符串的获取 (2015-08-11)

// //  main.m //  字符串的获取 // //  Created by admin on 15/8/13. //  Copyright (c) 2015年 admin. All rights reserved. // #import <Foundation/Foundation.h> /* 1. 获取字符串长度 2. 根据字符串索引获得单个字符    // 这里的索引 就是下标 3. 根据索引获得一个字符串 4. 根据子串获得子串在另一个字符串中的索引位置 5. 根据字符串,获得

小白学开发(iOS)OC_ 字符串重组(2015-08-13)

// //  main.m //  字符串重组 // //  Created by admin on 15/8/13. //  Copyright (c) 2015年 admin. All rights reserved. // #import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { @autoreleasepool { //      1. 多个数据拼接成一个字符串 int year = 2015

小白学开发(iOS)OC_ 字符串写入文件(2015-08-13)

// //  main.m //  字符串写入文件 // //  Created by admin on 15/8/13. //  Copyright (c) 2015年 admin. All rights reserved. // #import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { @autoreleasepool { /* 将字符串写入到一个文件,并保存 > 需要写入文件的字符串内容