黑马程序员---OC---block使用

/* 总结:   block是一种数据类型:

block用来保存一段代码

block标志  ^

block和函数很像:

1> 可以保存一段代码

2> 有返回值

3> 有形参

4> 调用方式和函数一样

掌握:

1.定义block变量

void (^myBlock2)();

int (^sumBlock)(int, int);

2.利用block封装代码

^() {

NSLog(@"------");

};

^ {

NSLog(@"------");

};

^(int a,int b) {

return a + b;

};

3.block访问外面变量

* block内部可以访问外面的变量

* 默认情况下,block内部不能修改外面的局部变量

* 给局部变量加上__block关键字,这个局部变量就可以在block内部修改、访问

4.利用typedef定义block类型,类型名大写开头

typedef int(^MyBlock)(int, int);   // 以后就可以用MyBlock这种类型定义block变量

MyBlock b;

MyBlock b1, b2;

b = ^(int a,int b) {

return a + b;

};

MyBlock b3 = ^(int a,int b) {

return a + b;

};

*/

// block基本使用

void baseUseBlock()

{

// 定义block变量myBlock;此时并不执行block里面的代码

// 无返回值,无形参

void (^myBlock)() = ^(){

NSLog(@"------");

};

void (^myBlock2)();

myBlock2 = ^(){

NSLog(@"------");

};

// 如果block没有形参,可以省略后面的()

void (^myBlock3)() = ^{

NSLog(@"------");

};

// 利用block变量myblock调用block内部的代码;执行

myBlock();

myBlock2();

myBlock3();

}

// block基本使用2

void baseUseBlock2()

{// 定义一个block类型的变量sumBlock;此时并不执行block里面的代码

// 返回int,接收2个int类型的形参

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

return a + b;

};

/*   等价于

int (^sumBlock)(int, int);

sumBlock= ^(int a, int b){

return a + b;

};

// 指向函数的指针  int (*p)(int, int) = sum;

*/

NSLog(@"he is %d", sumBlock(233,23));  // 利用block变量sumBlock调用block内部的代码;执行

// 利用block输出n条横线

void (^lineBlock)(int) = ^(int n){

for (int i = 0; i < n; i++) {

NSLog(@"-------------");

}

};

lineBlock(3);

}

// block基本使用3---typedef

void baseUseBlock3()

{

typedef int(^MyBlock)(int, int);   // typedef自定义新的数据类型MyBlock  类型名 大写开头

MyBlock sumBlock;

sumBlock = ^(int a,int b){

return a + b;

};

MyBlock minusBlock =  ^(int a,int b){

return a - b;

};

NSLog(@"%d,%d", sumBlock(1,5), minusBlock(3,6));

}

// block基本使用4---访问外面的局部变量

void baseUseBlock4()

{

int a = 10;

__block int b = 100;

void (^myBlock)() = ^ {

//        a = 1000;   // 错误写法  默认情况下,block内部不能修改外面的局部变量

b = 111;    // 给局部变量b加上__block关键字,这个局部变量就可以在block内部修改、访问

NSLog(@"a is %d, b is %d", a, b);  //  block内部可以访问外面的变量

};

myBlock();

}

时间: 2024-10-10 08:42:10

黑马程序员---OC---block使用的相关文章

黑马程序员-OC学习笔记之block

过山车 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 9426    Accepted Submission(s): 4151 Problem Description RPG girls今天和大家一起去游乐场玩,终于可以坐上梦寐以求的过山车了.可是,过山车的每一排只有两个座位,而且还有条不成文的规矩,就是每个女生必须找个个男生做par

黑马程序员—oc语言学习心得—block

黑马程序员—oc语言学习心得—block -------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 1,程序一般用typedef定义一个block类型 然后调用 typedef void(^xxx)(); 可使用助记符 inlineblock 2,Block内部可以访问外部变量:默认情况下,Block内部不能修改外部的局部变量 给局部变量加上__block关键字,则这个局部变量可以在block内部进行修改. 3,block的作用: 利用block封

黑马程序员-OC学习笔记之Foundatio框架集合类

---------------------- IOS开发.Android培训.期待与您交流! ---------------------- 一.OC数组 OC数组是一个类,它也分不可变数组NSArray和可变数组NSMutableArray. 1?不可变数组的创建 // 创建一个不可变数组,元素为一个OC字符串对象 @"小桥" NSArray *array1 = [NSArray arrayWithObject:@"小桥"]; // 创建一个不可变数组,元素为多个O

黑马程序员——oc语言学习心得—— 属性声明和赋值

黑马程序员——oc语言学习心得—— 属性声明和赋值 -------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 1,在oc中所有类继承与终极父类Object2,声明字符变量采用N是string  *_xxx 实例变量一般以下划线开头3,在oc中方法以+ -号区分 -号开头是实例方法或对象方法  +号开头是类方法  前置用对象调用 后者用类名调用4,在xcode4以后声明@property 不用在写@snysize  自动生成get.set方法5,属性

黑马程序员-OC内存管理 @property的增强

涉及到内存管理,只读,多线程等很多功能时,setter和getter方法也就没那么简单了:当然@property依然强大,很好用: 1:内存管理相关参数: *:retain:  (如果是oc对象类型),生成的setter会自动release旧值,retain新值: *:assign:(适用于非oc对象)  这个是默认的值 *:copy:release旧值,copy新值: @property (retain) NSString *name; // 同类型的参数不能同时写 // @property

黑马程序员-OC self super isa指针

self指针: self是oc面向对象设计中的一个特殊指针,相当于java中的this,但是比this强大,this只能访问实例对象的相关方法和成员变量,或者说this只代表实例对象: self不仅可以代表实例对象,还可以代表类对象:谁调用当前方法,self就代表谁:如果self用在了以"-"号的方法中,也就是对象方法中,那么就代表实例对象,若果在"+"号开头的方法中,self就代表类对象,因为只有类对象才能调用以"+"号开头的方法: self调

黑马程序员 oc与c的区别,联系

1.文件的扩展名的区别       1>c语言源文件的扩展名是.c,而oc的扩展名是.m       2>c语言经过编译之后得到的目标模块扩展名是.obj,而oc编译之后是.o       3>c语言目标程序与其他目标程序和库函数经过连接得到可执行文件的扩展名是.exe,而oc是.out2.两者的编程思想是不同的        c语言是面向过程的编程语言,oc是面向对象的编程语言3.oc语言对于c语言的拓展       oc是面向对象的编程语言,它的基本数据类型比c语言多了个bool类型

黑马程序员-OC学习笔记之Foundation框架NSNumber、NSValue和NSDate

---------------------- IOS开发.Android培训.期待与您交流! ---------------------- 一.NSNumber 前几篇笔记中,小桥复习了Foundatio框架中的几个类,这三个是OC学习的尾声了. 小桥已经复习过OC数组类NSArray,也说过它只能存放OC的对象,对于基本的数据类型确无能为力,但是实际编程中经常要把基本的数据如int.float,结构体存放的OC数组中,怎么办?这里的NSNumber就有用了,它能够把基本数据类型包装成OC对象.

黑马程序员-OC面向对象继承关系和组合关系笔记

继承关系是描述类和类之间的关系,两个类分别称为子类和父类,子类继承了父类,子类就拥有了父类的属性和方法: 继承的关系特点描述出来就是:** "是" **  (例如:学生类 是 人类) 组合关系描述的语句是:**** "拥有" ***  (例如:学生有成绩这个属性,而成绩属性本来就是一个成绩类的对象 ) 继承示例代码: #import <Foundation/Foundation.h> //Animal类的声明 @interface Animal : NS

黑马程序员-oc对象的内存管理

oc没有java的垃圾回收机制,所以对象的内存释放很重要,基本数据类型,我们不用理会,编译器会处理: oc的每个对象内部都由一个计数器,用来记录当前有几个指针在指向该对象:当计数器为0时该对象会从内存中释放: 相关方法和概念: 1:retain:对象方法,调用该对象方法,计数器+1,有返回值,返回对象本身: 2:release:没有返回值,计数器-1: 3:retainCount:获取当前计数器的值: 4:dealloc:当对象被回收时,就会调用该方法,覆盖该方法时一定要调用[super dea