黑马程序员——Objective-c——block和protocol

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------



Block的掌握

1、如何定义block变量

    int (^sumBlock)(int , int);

void (^myBlock)();

2、如何利用block封装代码

     ^(int a, int b)

    {

        return a+b;

    };

    

    ^(){

    NSLog(@"----");

    };

    

    ^{

       NSLog(@"----");

    };

3、block访问外面的变量

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

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

 *给局部变量加上__block关键字,这个局部变量就可以在block内部修改

 

4、利用typedef定义block类型

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

    MyBlock b=^(int a, int b) // 利用MyBlock类型定义block变量

    {

        Return a-b;

};

 

代码:

 

int main()

{

    int a = 10;

    __block int b = 20;

    void (^block)();

    block = ^

    {

        NSLog(@"a=%d",a); // block内部可以访问外部的变量

        // a = 20;// 默认情况下,block内部不能修改外面的局部变量

        b = 25; // 给局部变量加上__block关键字,这个局部变量就可以在block内修改

    };

    block();

    return 0;

}

 

@protocol 协议

1、协议的定义

 @protocol 协议名称 <NSObject>

   // 方法声明的列表

 @end

 

2、如何遵守协议

 1>类遵守协议

 @interface 类名 父类名 <协议名称1, 协议名称2...>

 @end

2>协议遵守协议

 @protocol 协议名称 <其他协议名称1, 其他协议名称2....>

 @end

 

3、协议中方法声明的关键字

 1>@required(默认)  要求实现,如果没有实现,会发出警告

 2>@optional        不要求实现,没有实现不会有警告

 

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

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

NSObject <MyProtocl> *obj;   id <MyProtocl> obj2;

 

5、@property中声明的属性也可以做一个遵守协议的限制

 @property (nonatomic , strong ) 类名 <协议名称> *属性名称;

 @property (nonatomic, strong ) id<协议名称> *属性名称

 

6、协议可定义在单独的.h文件中,也可定义在某个类中

 1>如果这个协议只用在某个类中,应该把协议定义在该类中

 2>如果这个协议用在很多类中,就应该定义在单独的文件中

 

7、分类可定义在单独的.h.m文件中,也可定义在原来的类中,要求能看懂这个语法



------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值