黑马程序员—IOS基础之OC—block和protocol
来源:互联网 发布:mac qq接受文件没反应 编辑:程序博客网 时间:2024/05/21 12:40
——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——
第一章 block
一、block的概念和基本的使用
1、block的概念
block类型是一个C级别的语法和运行机制。除了包含可执行代码外,与堆区、栈区内存绑定的变量,block是一组状态数据。Objective-c和c++都源自于c语言,而我们定义的block可以兼容三种语言。block代码段是一个类型,这个类型可以定义一个存储代码段的变量。
2、block的用法
基本格式:返回值类型(^类型名)(参数的类型)=^(参数名称及类型){语句块};用^来声明一个block。
block的最简形式
void(^block)()=^{};
最复杂形式:有参有返回值
int(^myBlock)(int,int)=^(intx,int y){ return x+y;};//分号不能忘//调用int sum = myBlock(5,6);//11//myBlock是一个block类型的变量,我们可以赋值myBlock = ^(int ,int y){ return x-y;};
3、block的typedef
函数指针的typedef
//给函数指针取别名 ptypedef int(*p)(int x,int y);int sum(int x,int y){ return x+y;}//运用函数指针p=sum;//p指向sumint s = p(1,1);//2
2、block的typedef
//定义一个block的类typedef void(^Block)();//利于Block定义类Block b1;//连续定义多个Block b2,b3,b4;//初始化b1 = ^{NSLog(@"b1是个block类型");}
二、block的高级使用
1、block访问外部变量
int m = 10;void (^myBlock)()=^{//可以访问m这个变量//因为在定义block时,block会把外部变量的值拷贝一份存放到block所在的内存中,在堆区。//不能修改m的值,因为拷贝的时候是以const的方式拷贝的,const修饰的值表示的是无法修改//非要修改的话,在外部定义变量时这么写:__block int m = 10;此时在block内部就能修改m=100;//在block内部创建的值存放在栈区int x=1;NSLog(@"%d",m);}//如果用__block修饰了变量,而且在block使用了得话,那么以后所有对m的访问都是在block内部
2、block的几种方式
(1)全局block:函数外面,若在里面,那么不能捕获局部变量(2)栈block区别是否引用外部变量(3)堆block对栈block copy得来,对全局的block copy没用注意:block内部变量时只读的对定义的全局变量可直接在block中修改
3、block作为函数的返回值
//定义block类型btypedef void(^b)();B test(){B w1 = ^{NSLog(@"lala");}; return w1;}//调用B t = test();//执行t();
4、block的使用技巧
(1)inlineblock助记符:快速写出格式(2)我们定义block变量时可以在形参类型及个数位置处加上形参名称。即:
void(^block)(int x,int y)=^(int x,int y){};
第二章 Protocol
一、protocol概念及基本使用
1、protocol的基本使用
OC中,借口由协议的protocol来实现的,protocol定义了一大堆方法,并未实现。
.h定义协议ClassA.h类声明的时候采纳协议ClassA.m实现协议对应的方法
定义协议
@protocol 协议名称<NSObject>//系统默认遵守NSObject//方法声明列表@end
采纳协议
@interface 类名:父类<协议名称1,协议名称2,协议名称3>@end
注意:协议也能遵守其他协议,协议的作用是供其他类遵守。
如果遵守一个协议就应该实现这个协议定义中必须要实现的方法。
结论:当我们遵守一个协议的时候,就有了协议中方法的声明。
2、protocol的使用注意
(1)protocol一个用途用来声明一大堆方法(2)遵守协议就有了协议的所有方法(3)父类遵守协议,那么相应的子类也应该遵守(4)protocol声明的方法可以让任何类去实现(5)OC不能继承多个类,但是能遵守多个协议(6)基协议(7)协议也能遵守其他协议
3、protocol基协议介绍
NSObject中有很多编译器提供的方法,遵守NSObject就能够拥有这些方法,就能在程序运行中调用这些方法,这些方法是不用在实现,但是我们可以重写。
4、@required和@optional
@required必须要实现的方法@optinal选择实现的方法如果不加关键字修饰,默认都是必须要执行的
@protocol playgameProtocol<NSObject>//@required必须执行的方法,作用域遇到下一个关键字或者@end@required-(void)study;-(void)exam;-(void)exerise;//@optional选择执行的方法,作用域遇到下一个关键字或者@end@optional-(void)fighting;-(void)love;@end
5、protocol类型限制
//1、增加类型限制Dog *d = [Dog new];Girl *mm=[Girl new];//表示lala只能赋值了遵守houseHold协议的对象id<houseHold> lala=mm;//2、表示对象是Girl对象,并且遵守houseHold协议Girl<houseHold> lala=mm;//3、对象关联关系下得限制@property(nonatomic,strong)Dog<>*dog;
二、protocol代理设计模式
MVC
m->model
v->view
c->controller
主要思路: (1)定义一个协议,声明代理类需要实现的方法列表 (2)创建一个代理类(3)在需要代理类中,定义对象类型为id类型,且遵守代理协议的成员变量。(4)在需要代理类中调用成员变量_delegate(代理)的方法调用代理方法。(5)在main.m或其他类中使用,个需要代理类赋值使用。应用场合:(1)监听器场合(2)通知的场合(3)有些自己不想做的事,交给别人做
——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——
0 0
- 黑马程序员—IOS基础之OC—block和protocol
- 黑马程序员------OC基础-----block和protocol
- 黑马程序员 OC基础: Block 和 Protocol
- 黑马程序员——OC基础04—block、protocol
- 黑马程序员——OC基础---block,protocol
- 黑马程序员——OC基础---Block、protocol
- 黑马程序员——OC之ARC、Block、Protocol
- 黑马程序员——OC—block和protocol协议
- 黑马程序员——OC语法 block和protocol
- 黑马程序员员—OC(block和protocol)
- 黑马程序员——OC语言基础篇---block和protocol
- 黑马程序员——OC基础:block和Protocol及Category
- 黑马程序员-iOS基础之OC重点语法(Block、Protocol)
- 【黑马程序员】-oc中的block和protocol
- 黑马程序员-OC-block和protocol
- 【黑马程序员】iOS学习之路——Objective-C之protocol和block
- 黑马程序员——OC基础学习(五)---分类(Category),代码块Block和protocol代理设计模式
- 黑马程序员IOS基础---OC学习之Protocol
- 正则表达式去除粘贴代码行号
- 【思路题】【多校第一场】【1001.OO’s Sequence】
- spring对shiro注解支持的原理
- STM32CUBE——7 DS18B20
- C语言之函数调用08—暴力法求4个数的最大公约数和最小公倍数
- 黑马程序员—IOS基础之OC—block和protocol
- 黑马程序员—IOS基础之C语言—数组与指针
- 初始化列表和构造函数
- hadoop
- windows服务器因多用户登陆文件夹权限更改后不能正常删除
- Swift的一些特点,重要概念和应用
- C语言之函数调用09—判断一个数是否为素数
- Android WebView 和 手机后退按钮 的故事
- ios AudioSession简介