您的位置:首页 > 移动开发 > IOS开发

iOS学习笔记基础-oc08protocol、代理模式、block

2014-09-16 16:52 330 查看
一、protocol部分:

1、    基本用法:可以用来声明一大堆方法(不能声明成员变量);只要某个类遵守了这个协议,就相当于拥有这个协议中的所有方法声明;只要父类遵守了某个协议,就相当于子类也遵守了。

2、    格式:

@protocol 协议名称

方法声明列表

@end

某类遵守协议的格式:

@interface 类名 : 父类 <协议名称>

@end

3、    关键字:@required:必须实现的方法,不实现,编译器回出现警告

@optional:不一定要实现。

    4、  注意:一个协议可以遵守其他多个协议,多个协议之间用逗号 , 隔开;

一个协议遵守了其他协议,就相当于拥有了其他协议中的方法声明。

例如:@protocol 协议名称 <协议1,协议2,…...>

@end

5、 基协议:

①NSObject是一个基类,最根本最基本的类,任何其他类最终都要继承它;

②其实还有一个协议,名字也叫NSObject,它是一个基协议,最根本最基本的协议;

③NSObject协议中声明很多最基本的方法,比如description、retain、release等;

     ④建议每个新的协议都要遵守NSObject协议。

    6、定义变量时指定协议

NSObject类型的对象,并且要遵守NSCopying协议
NSObject<NSCopying>*obj1;
任何OC对象,并且要遵守NSCoding协议
id<NSCoding> obj2;

二、代理模式:

1、代理模式:有些麻烦的事情不想自己亲自做,就可以找个人帮忙做,即交给代理对象去做。

2、设计原则:

①  首先得拥有某个代理对象属性;

②  其次要很清楚代理有哪些方法;

③  最后要保证能解耦。

3、实现方案:

①  定义一个protocol,在其中声明一些和代理沟通的方法;

②  拥有一个代理属性id<protocol> delegate;

③  让代理遵守protocol。

三、block部分:

1、基本用法:

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

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

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

3、blocks的定义:

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

   return a+b;

};

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

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

intsum = 10;

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

   sum++;//编译报错

   return num * sum;

};

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

__blockint sum = 10;

4、block的赋值:

①  在声明的同时定义变量,然后赋值

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

   return a + b;

};

②  也可先用typedef先声明类型,再定义变量进行赋值

typedefint (^MySum)(int,int);

MySumsum = ^(int a,int b) {

   return a + b;

};

5、blocks和函数指针的对比:

①  定义函数指针

int(*myFn)();

           定义Blocks

int(^MyBlocks)(int,int);

②  调用函数指针

(*myFn)(10,20);

           调用Blocks

MyBlocks(10,20);

 

 

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