OC基础之 ---------- block / 代理模式 ,协议 /

来源:互联网 发布:java解析xml文件 编辑:程序博客网 时间:2024/05/22 12:52

block:oc的一种变量,在程序运行时使用

block的作用: 保存代码  / 可以有返回值 /有形餐

block 标志 : ^

//  无参 ,无返回值的block

  void (^myblock) ()= ^ {
            NSLog(@"这是一个简单的block块");
        };      


//有参有返回值的block

 int (^myblock1)(int ,int) = ^(int a ,int b){
            return (a + b);
        };
  int a =   myblock1(4,5);
      

 //有参无返回值的block

void (^myblock1)(int) = ^(int n){
            for (int i = 0; i < n; i++) {
                NSLog(@" ------------ ");
            }
                    };
       myblock1(4);


void : 返回类型

(^mrblock) :block的名称

  () : 里面是参数

2 >使用typedef 定义一个类型名称

typedef int (^MyBlock)(int ,int);

 MyBlock block = ^(int a, int b){
            return a+b;
        };
      int a = block(1,2);


block总结:

1》如何定义一个block

int  (^myblock)(int) ;

void (^mablock)();

2> 如何利用block来封装代码

^(int a ,int b){

returan  a - b;

};

3>block访问外部变量

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

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

 给局部变量加上_block关键字,这个局部变量可以在block内部进行修改

4》使用typedef 定义一个类型名称

typedef int  (^MyBlock) (int ,int);

// 以后就可以使用MyBlock这种类型来定义block变量
MyBlock block;

MyBlock   b1 ,b2 ;

b1 = ^ (int a ,int b){

return a + b;

}


代理  --- 协议

1.协议的定义

@protocol 协议名称 <nsobject>

//  方法生命列表。。。。。。

@end


2》定义一个变量的时候,限制这个变量保存的对象遵守某个协议

类名 <协议名称> *变量名 ;

id <协议名称> *变量名 ;

nsobject <myprotocol>  *obj;

id <myprotocol>  obj1;


3>

0 0