ObjectC语言基础1—block、protocol、代理设计模式


一、block代码块

1、本质上代码块支持在代码中内连的定义一个函数对象,这些对象可以通过变量来访问,同时可以当作参数传递到其他函数中去。

2、默认情况下代码块内部可以访问外部变量,但在代码开内部不能修改局部变量的值。

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

4\指向函数的指针 int (*p)(int ,int )= sum;

5 如何定义block变量 int (^myBlock)(int ,int) ;void (^yourBlock)();

6如何用block变量封装一段代码^{  };^(int a, int b){return a+b;};

7\block访问外部变量,1block内部默认可以访问外部变量2block内部不可以修改外面的局部变量的值3给局部变量加上—block,这个变量就可以在block内部进行修改。

8、使用typedef定义新类型,typedef (^myBLock)(int ,int);以后就可以使用myblock这种类型定义新变量。myblock a ,b;

[java]  view plai
  1. //block本身是变量,他的标志是^.跟函数很像,1都可以保存代码,2有返回值,3可以传递参数。在运行中创建一段代码保存起来
  2. //为了增加程序的可读性,一般给变量定义个别名,这里有个主意,typedef是定义类型,而下面代码等号后面的是初始化,定义了类型,后面的初始化也是要写的。

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

  4. //下面这个block声明和定义写在一起,这个block变量的名字叫做sumblock
  5. //int (^sumblock)(int, int) = ^(int a, int b){
  6. // return a+b;
  7. //}

  8. //调用方法与函数一致
  9. sumblock(10,11);
  10. int main()
  11. {
  12. //MyBlock就是一个变量类型,addblock就是一个变量。
  13. //利用block封装一段代码。
  14. MyBlock addBlock = ^(int a, int b){
  15. return a+b;
  16. }

  17. MyBlock minusBlock = ^(int a,int b){
  18. return a-b;
  19. }

  20. minusBLock();//调用block;
  21. addBlock();//调用block;
  22. }


二、protocol协议

1、可以声明一大堆方法等着别人去实现,但不能声明成员变量。是一个头文件

2、只要某个类遵守了这个协议,就想当于拥有了这个协议中的所有方法的生命。

3、只要父类遵守了默个协议,就相当于子类也准首了这个协议。

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

5、基协议NSObject,基协议是声明在Foundation框架中的,在自定义一分协议的时候,一定要遵守基协议。

6、限制对象类型,在类名后面加上<Myprotocol>

7、一个协议是一份头文件,是可以定义在类的头文件中的,用@protocol@end扩上即可,但这个协议只用在当前类里面,协议写在这个类里面就可以了

写分类的目的是让原来的文件不修改而添加方法,分类也是可以写在类里面的,当分类的方法的时候可以写在原来的类里面。分类用括号(),协议用<>括号。

8 OC是单继承 ,但一个类可以遵守多个协议。

9@proproty中声明的属性也可以做一个遵守协议的规定,@property (noautomic,strong)类名<协议名> *属性名。

@properry  (noatuomic ,stong)id<协议名> 属性名。


[java]  view plai
  1. //协议文件格式,头文件
  2. #import <Foundation/Foundation.h>
  3. //协议需要有类区遵守。
  4. @protocol MyProtocol
  5. //协议里面只是生命方法,等待别人去类实现
  6. //协议里面可以对方法进行约束,@required默认必须实现, @optional。方法声明的关键字
  7. @end

  8. //Person类文件.h
  9. #import <Foundation/Foundation.h>
  10. #import "MtProtocol.h"
  11. @interface Person:NSObject <MyProtocol>遵守协议
  12. //方法声明列表
  13. @end

  14. //Person类文件.m
  15. #import “Person.h"
  16. @implementation Person
  17. //文件一旦遵守了协议,就要实现协议里面的必须实现的方法。
  18. @end

  19. NSObject<MyProtocol> *obj1 = [[Person alloc] init];
  20. id<MyProtocol> obj2 = [[Person alloc] init];
  21. //一个对象遵守了某个协议,并继承Person
  22. Person<MyProtocol> object = [[Person alloc] init];
  23. //在调用set方法的时候传入的对象一定要遵守这个协议
  24. @property <noautomic, strong> id<Myprotocol> obj;

  25. //协议的提前声明
  26. @class声明一个类,里面有什么无需关注,当用到类里面的东西的时候才需要关注
  27. @protocol声明一个协议,里面是什么无需关注,当到真正用到里面的东西的时候用#import 



三、协议的应用代理设计模式

初步了解代理设计模式,一件事对象本身不想做,可以叫代理帮它做。

[java]  view plai
  1. //首先一个类要拥有代理属性,代理对象
  2. @property (nonatomic, retain ) id<Protocol> delegate;
  3. //编写一个协议,要代理拥有哪些方法。
  4. 一个类要想当代理,必须实现代理协议,换个代理,代理只要实现这个协议就可以了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值