OC语言学习-其他

来源:互联网 发布:手机学全站仪的软件 编辑:程序博客网 时间:2024/05/19 12:25

数据类型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;};

完整写法:

//不带参数的blockvoid (^myBlock) ()=^{         NSLog(@”--------------------”);};//带参数的blockint(^sum)(int,int)= ^(int a,int b){          return a+b;};

block调用:

myblock(); //调用myblockint 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;    }//调用sumBlockint 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文件中,也可定义在该类中

使用情景:

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

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


0 0
原创粉丝点击