OC语言学习-其他

数据类型Block

block本质:指向函数的指针

block跟函数差不多,区别在于block并不确定,可以在运行时随时随地编写

代码中定义一个block:

无形参无返回值: 

void (^myblock) ();  //定义了一个block类型的myblock

有形参有返回值:

int (^sumblock)(int,int); //定义了一个传入两个int形参和返回int类型的block类型的sumblock

block封装代码:

//封装无参数的代码
^{

             NSLog(@”--------------------”);

};

//封装有参数的代码
^(int a,int b){
      return a+b;
};

完整写法:

//不带参数的block
void (^myBlock) ()=^{

         NSLog(@”--------------------”);
};

//带参数的block
int(^sum)(int,int)= ^(int a,int b){ 
         return a+b;
};

block调用:

myblock(); //调用myblock

int a=sumblock(5,4); //调用sumblock并把block的返回值赋值给a

Block知识点:

  • 能访问程序中外面变量,但默认情况下不能修改外部局部变量,加上双下划线_ _block关键字即可修改外面局部变量,如:_ _block int a;
  • 利用typedef自定义Block类型

//定义了一个sumBlock类型,这个类型传入两个形参并返回两者之和
typedef int (^sumBlock) (int,int);
//用sumBlock定义s并封装代码
    sumBlcok s=^(int a,int b){
    return a+b;
    }
//调用sumBlock
int a=s(5,10);

协议protocol

协议的定义

@protocol 协议名 <NSObject>

           方法声明列表….

@end

如何遵守协议

  • 类遵守协议

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

@end

  • 协议遵守协议

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

@end

协议中方法声明的关键字

  • @required (不写即默认为required)

  要求实现声明的方法,如果不实现,会发出警告

  • @optional

  不要求实现

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

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

  2. id <协议名称> 变量名;

如:NSObject<MyProtocol> *obj;

          如果不遵守协议,会严重警告

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

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

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

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

使用情景:

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

如果这个协议用在多个类中,应该把协议定义在单独文件中

分类也可定义在单独.h和.m文件中,也可定义在该类中

使用情景:

一般情况下,都是定义在单独文件中

定义在原来类中的分类,知道语法可行即可


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值