*Block 的概念 和 协议 的概念

1.block的概念


block类型是C语言级别的语法和运行机制。可以理解成block类型存储代码块。

可以让函数返回一个block代码块。也可以让block作为函数的参数。


无参数无返回值

void (^block变量名) ( ) = ^(){  代码块语句};

优化: void (^block变量名) ( ) = ^{  代码块语句};


无参数有返回值

返回值类型 (^block变量名) () =^(){ 代码块语句 return; };


有参数无返回值:

void (^block变量名)(参数类型及个数)=^(形参列表){ 代码块语句 };

定义变量,再赋值:

void (^myBlock) (int ,int ) = ^(int a ,int b){return NSLog(@"a + b = %d",a+b);}

myBlock(1,2);

定义变量的同时赋值:

myBlock= ^(int a ,int b){return NSLog(@"a + b = %d",a+b);}

myBlock(1,2);


有参数有返回值:

返回值类型 (^block变量名)(参数类型及个数)=^(形参列表){ 代码块语句 return; };


2.block的typedef


函数指针的别名:typedef int (*NewType)(int ,int ); NewType f1,f2;//f1,f2为函数指针类型的变量

block与其类似:typedef  返回类型 (^新类型名)();


3.block访问外部变量


block会把外部变量以const的方式复制一份,不能更改。

用_ _block定义后,不以const方式复制,可以修改外部变量,修改的是复制过后的值。以后使用的变量都是复制后的那个,而不是开始定义的那个。

__block int m =10;

void (^myBlock)() = ^{ m =100;NSLog(@"%d",m);}

NSLog(@"%d",m);

//两个m值都是100

分类:栈block 堆block 全局block

全局变量在block内部直接可以修改。


4.block作为函数的返回值


使用typedef定义block类型 ,作为返回类型。


5.block的使用技巧以及注意


助记符:inlineBlock

助记符可以自己创建。<#  #>

加上形参名称,有利于使用快捷方式。


6.协议的概念 protocol


OC中,可以定义一个类必须实现某个方法妈?

一般在.h文件中定义一个协议,声明一些方法,供其他的类去遵守,一旦采纳这个协议,就必须实现协议中定义的必须实现的方法。


协议的使用流程:

先定义(.h),然后采用协议(.h),实现协议中的方法(.m,方法是必须实现,也可 选择实现)。

注意导入头文件。

定义:

@protocol 协议名 <NSObject>  //默认的协议

//方法声明列表

@end


采纳:

@interface 类名 :父类< 协议名,...>

@end


实现:在.m文件中实现方法。


一个协议可以遵守其他的协议;一个类可以遵守多个协议;

一个协议也可被多个类遵守;协议可以被继承;

NSObject的协议是 基协议。任何协议都遵守基协议。


protocol中的@required和@optional :


@required 必须要实习的

@optional 选择实现的


protocol的类型限制:定义变量时,可以使用<协议>来限制过滤赋值。


id和instancetype的区别:

  • instancetype只能作为方法或者函数的返回值
  • id可以定义变量,也可以作为返回值
  • instancetype的好处是可以精确的限制返回值的类型

protocol代理模式的设计引入


一个类的行为是别的类帮其实现的。

MVC的开发模式。model  view controller

代理对象名为delegate 类型为id类型<协议>过滤。一定要给delegate对象赋值。不然无法使用。

























  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值