码迷,mamicode.com
首页 > 其他好文 > 详细

block和protocol

时间:2014-12-16 23:54:49      阅读:218      评论:0      收藏:0      [点我收藏+]

标签:style   blog   ar   io   color   sp   for   strong   on   

一.Block

1.基本概念

BLOCK是什么?苹果推荐的类型,效率高,在运行中保存代码。用来封装和保存代码,有点像函数,BLOCK可以在任何时候执行。

BOLCK和函数的相似性:(1)可以保存代码(2)有返回值(3)有形参(4)调用方式一样。

标识符为^

// 用一个block输出n条横线
    
    
    void (^lineBlock)(int) =  ^(int n)
    {
        for (int i = 0; i<n; i++) {
            NSLog(@"----------------");
        }
    };
    lineBlock(5);

2.如何定义block变量

 int (^sumBlock)(int, int);
 void (^myBlock)();

3.如何利用block封装代码

^(int a, int b) {
    return a - b;
 };
 
 ^() {
    NSLog(@"----------");
 };
 
 ^ {
    NSLog(@"----------");
 };

4.block访问外面变量

  • block内部可以访问外面的变量
  • 默认情况下,block内部不能修改外面的局部变量
  • 给局部变量加上__block关键字,这个局部变量就可以在block内部修改

5.利用typedef定义block类型

typedef int (^MyBlock)(int, int);
 // 以后就可以利用MyBlock这种类型来定义block变量
 MyBlock block;
 MyBlock b1, b2;
 
 b1 = ^(int a, int b) {
    return a - b;
 };
 
 MyBlock b3 = ^(int a, int b) {
    return a - b;
 };

二.Protocol

1.基本用途

用来声明一大堆的方法(不能声明成员变量),不能写实现。

2.特性

1)只要某个类遵守了这个协议,就拥有了这个协议中的所有方法声明。

2)只要父类遵守了某个协议,那么子类也遵守。

3)Protocol声明的方法可以让任何类去实现,protocol就是协议。

4)OC不能继承多个类(单继承)但是能够遵守多个协议。继承(:),遵守协议(< >)

5)基协议:<NSObject>是基协议,是最根本最基本的协议,其中声明了很多最基本的方法。

6)协议可以遵守协议,一个协议遵守了另一个协议,就可以拥有另一份协议中的方法声明。

3.如何遵守协议

1) 类遵守协议

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

@end

2) 协议遵守协议

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

@end

 

4.协议中方法声明的关键字

1) @required (默认)

要求实现,如果没有实现,会发出警告

2) @optional

不要求实现,怎样不会有警告

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

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

id<协议名称> 变量名;

NSObject<MyProtocol> *obj;

id<MyProtocol> obj2;

 

如果没有遵守对应的协议,编译器会警告

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

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

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

 @property (nonatomic, strong) Dog<MyProtocol> *dog;

 @property (nonatomic, strong) id<MyProtocol> dog2;

 

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

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

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

8.分类可用定义在单独.h和.m文件中,也可用定义在原来类中

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

2) 定义在原来类中的分类,只要求能看懂语法

 

block和protocol

标签:style   blog   ar   io   color   sp   for   strong   on   

原文地址:http://www.cnblogs.com/cwhking/p/4168202.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!