block和protocol

一.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;

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

[email protected]中声明的属性也可用做一个遵守协议的限制

@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) 定义在原来类中的分类,只要求能看懂语法

时间: 2024-10-14 18:59:54

block和protocol的相关文章

黑马程序员— block、protocol和Foundation

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 上一章我们学习了OC内存管理的相关知识,了解了OC程序在运行中对象及变量是如何释放以达到不占用内存的效果.本章我们来学习OC的block,protocol协议和Foundation框架. 第一讲     block 1. block简介 block封装了一段代码,可以在任何时候执行 block可以作为函数参数或者函数的返回值,而其本身又可以带输入参数或返回值. 苹果官方建议尽量多用block.

黑马程序员_ Objective-c 之block、protocol学习笔记

一):block学习总结 block :用来保存一段代码. 1.block 特点:  1> Block封装了一段代码,可以在任何时候执行   2> Block可以作为函数或者函数的返回值,而其本身又可以带输入参数或返回值  3> 苹果官方建议尽量多用block,在多线程.异步任务.集合遍历.集合排序.动画转场用的很多  4> Block可以在程序运行时凭空产生一个代码保存起来  2.block的标志:^  3.block跟函数很像 1> 可以保存代码  2> 有返回值 

黑马程序员——OC语言的Block与Protocol(协议)

Block ● Block封装了一段代码,可以在任何时候执?行 ● Block可以作为函数参数或者函数的返回值,?而其本?身又可以带输?入参数或返回值. ● 苹果官?方建议尽量多?用block.在多线程.异步任 务.集合遍历.集合排序.动画转场?用的很多 定义BLOCK变量 Int (^SumBlock)(int,int);//有参数,返回值类型为int Void (^MyBlock)()://无参数,返回值类型为空 Blocks的定义: int (^MySum)(int, int) = ^(i

Objective-C Block数据类型 @protocol关键字

Block数据类型 Block封装了一段代码 可以在任何时候执行 Block可以作为函数参数或者函数的返回值 而其本身又可以带输入参数或返回值 苹果官方建议尽量多用Block 在多线程 异步任务 集合遍历 集合排序 动画转场用的很多 定义Block变量 void (^myBlock) (); int (^sunBlock) (int, int); 利用Block封装代码 ^ { NSLog(@"=========="); }; ^() { NSLog(@"=========&

OC - 6.block与protocol

一.block 1> 基本使用 相当于用来存放代码的代码块 效率高 若没有形参可以省略小括号 2> block与函数的相同点 可以保存代码 可以有返回值 可以有形参 调用方式一样 3> block对外部变量的访问 可以访问外部变量 默认情况下,不能在block内修改外部变量 用关键字__block修饰外部变量,就可以在block内修改它 4> 用typedef定义block类型与函数类型 定义block类型 ① 格式:typedef int (^myBlock)(int, int)

黑马程序员 block,protocol

#import <Foundation/Foundation.h> // 利用typedef创建block typedef int (^MyBlock) (int,int); // <>表示遵守协议 @protocol MyProtocol <NSObejct> /* 1.reqiured:要求实现方法,不实现方法编译器会发出警告 2.optional:不要求实现方法 3.默认情况下为reqiured 4.协议之间可以相互遵守,一个协议可以遵守多个协议<....,

黑马程序员_OC中的block和protocol

一.block block和指向函数的指针比较相似. 1.定义block变量 #import <Foundation/Foundation.h>   int main(int argc, const char * argv[]) {     //定义block变量,没有返回值类型,也没有形式参数     void (^myBlock)();         //给block变量赋值     myBlock=^{         NSLog(@"----------");  

「OC」block 和 protocol

一.block   (一)简介 block 是什么?苹果推荐的类型,效率高,在运行中保存代码.用来封装和保存代码,有点像函数,block 可以在任何时候执行.在多线程.异步任务.集合遍历.集合排序.动画转场用的很多. block 和函数的相似性:(1)可以保存代码(2)有返回值(3)有形参(4)调用方式一样. 标识符 ^ (二)基本使用 (1)定义block 变量 // 有参数,返回值类型为int int (^MySum)(int, int) = ^(int a, int b) { return

黑马程序员——OC学习小结------arc,block,protocol(协议)

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 一.ARC的判断准则:只要没有强指针指向对象,就会释放对象 1.ARC特点 1> 不允许调用release.retain.retainCount 2> 允许重写dealloc,但是不允许调用[super dealloc] 3> @property的参数 * strong :成员变量是强指针(适用于OC对象类型) * weak :成员变量是弱指针(适用于OC对象类型) * assign