您的位置:首页 > 职场人生

黑马程序员(OC特有语法-block和-Protocol)

2014-08-24 13:58 423 查看
------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流!
-------

-block

1、Block封装了一段代码,可以在任何时候执行

2、Block可以作为函数参数或者函数的返回值,而其本身又可以带输入参数或返回值

3、苹果官方建议尽、量多用block。在多线程、异步任务、集合遍历、集合排序、动画转场的很多

 

Blocks的定义:

int (^MySum)(int,int)
= ^(inta,
intb) {

  return
a+b;

};

定义了一个叫MySum的blocks对象,它带有两个int参数,返回int。等式右边就是blocks的具体实现

Block可以访问局部变量,但是不能修改。

intsum
=10;

int (^MyBlock)(int)
= ^(int num) {

  sum++;//编译报错

  return num *
sum;

};

如果要修改就要加关键字:__block

__block intsum=
10;

 

定义函数指针                                  

int (*myFn)();
定义Blocks
int (^MyBlocks)(int,int);

调用函数指针

(*myFn)(10, 20);

调用Blocks
MyBlocks(10, 20);

 

在声明的同时定义变量,然后赋值
int (^MySum)(int,int) = ^(int a,int b) {

  return a + b;

};

也可先用typedef先声明类型,再定义变量进行赋值
typedef int (^MySum)(int,int);

MySum sum = ^(int a,int b) {

  return a + b;

};

总之:block就是一个代码段,可以提高代码的灵活度。

 

--protocol

简单来说就是一系列方法的列表,其中声明的方法可以被任何类实现。这种模式一般称为代理(delegation)模式
在iOS和OSX开发中,Apple采用了大量的代理模式来实现MVC中View(UI控件)和Controller(控制器)的解耦
 

Protocol包含两个方法,btnClick:和btnInit:
这里还有两个关键字:@required和@optional,表示如果要实现这个协议,那么btnClick:方法是必须要实现的,btnInit:则是可选的,这两个关键字是在OC
2.0之后加入的语法特性。如果不注明,那么方法默认是@required的,必须实现
 
Protocol的使用场景

OC的Protocol和Java的接口很类似,如果一些类之间没有继承关系,但是又具备某些相同的行为,可使用Protocol来描述它们的关系,不同的类,可以实现同一个Protocol
最常用的就是委托代理模式,Cocoa框架中大量采用了这种模式实现数据和UI的分离。例如UIView产生的所有事件的处理,都是通过委托的方式交给UIViewController完成。根据约定,框架中后缀为Delegate的都是Protocol,如UIApplicationDelegate,UITableViewDelegate等
 
Protocol的注意

一个Protocol本身是可以实现其它Protocol
例如:

@protocol MyDelegate <UIWebViewDelegate>

@end

可以使用conformsToProtocol判断某个类是否实现了某个Protocol
例如:

[objconformsToProtocol]:

@protocol(MyDelegate)];

 

block和protocol这两个关键字,使用都很频繁的

 

 

 

 

 

 

   

  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: