Block数据类型

Block封装了一段代码 可以在任何时候执行

Block可以作为函数参数或者函数的返回值 而其本身又可以带输入参数或返回值

苹果官方建议尽量多用Block 在多线程 异步任务 集合遍历 集合排序 动画转场用的很多

定义Block变量

void (^myBlock) ();

int (^sunBlock) (int, int);

利用Block封装代码

^ {

  NSLog(@"==========");

};

^() {

  NSLog(@"=========");

};

^(int a, int b) {

  return a + b;

};

Block访问外面变量

Block 内部可以访问外面的变量

默认情况下 Block内部不能修改外面的局部变量

给局部变量加上__block关键字 这个局部变量就可以在Block内部修改

利用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关键字

可以用来声明一大堆方法 (不能声明成员变量)

只要某个类遵守了这个协议 就相当于拥有这个协议中的所有方法声明

只要父类遵守了某个协议 就相当于子类也遵守了

协议的编写格式

@protocol 协议名称 <NSObject>

//方法声明列表

@end

某个类遵守协议

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

@end

协议遵守协议

一个协议遵守了另外一个协议 就可以拥有另一个协议的所有方法声明

@protocol 协议名称 <协议名称1, ...>

//方法声明列表

@end

协议中方法声明的关键字

@required 要求实现 不实现会有警告 (默认)

@optionnal 可选实现

基协议

NSObject是一个基类 任何其他类最终都要继承它

还有一个NSObject基协议 声明了许多最基本的方法 比如 description retain release 等等

建议每一个新的协议都遵守NSObject基协议

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

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

id<协议名称> 变量名;

NSObject<MyProtocol> *obj = [[NSObject alloc] init];

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

如果没有遵守对应的协议 编译器就会报错

Objective-C Block数据类型 @protocol关键字的更多相关文章

  1. 黑马程序员——Block数据类型

    Block数据类型,又被称为代码段.因为它可以封装一段代码.苹果官方建议多用block.因为在多线程控制.异步任务,集合遍历.集合排序.动画转场等方面用的很多. Block的特点: 1.Block 用 ...

  2. 小白学开发(iOS)OC_ block数据类型(2015-08-08)

    // //  main.m //  block数据类型 // //  Created by admin on 15/8/12. //  Copyright (c) 2015年 admin. All r ...

  3. Java基本数据类型、关键字

    Java基本数据类型.关键字 一.Java基本数据类型 Java有8中基本数据类型:byte\char \short \int\float\double\long\boolean 在说明每种类型大小前 ...

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

    一):block学习总结 block :用来保存一段代码. 1.block 特点:  1> Block封装了一段代码,可以在任何时候执行   2> Block可以作为函数或者函数的返回值, ...

  5. OC语言-06-OC语言-block与protocol

    一.block 1> 基本使用 相当于用来存放代码的代码块 效率高 若没有形参可以省略小括号 2> block与函数的相同点 可以保存代码 可以有返回值 可以有形参 调用方式一样 3> ...

  6. block数据类型

    // //  main.m //  04-block数据类型 // //  Created by apple on 14-3-18. //  Copyright (c) 2014年 apple. Al ...

  7. OC - 6.block与protocol

    一.block 1> 基本使用 相当于用来存放代码的代码块 效率高 若没有形参可以省略小括号 2> block与函数的相同点 可以保存代码 可以有返回值 可以有形参 调用方式一样 3> ...

  8. 「OC」block 和 protocol

    一.block   (一)简介 block 是什么?苹果推荐的类型,效率高,在运行中保存代码.用来封装和保存代码,有点像函数,block 可以在任何时候执行.在多线程.异步任务.集合遍历.集合排序.动 ...

  9. OC语言的Block与Protocol(协议)

    Block ● Block封装了一段代码,可以在任何时候执⾏行 ● Block可以作为函数参数或者函数的返回值,⽽而其本⾝身又可以带输⼊入参数或返回值. ● 苹果官⽅方建议尽量多⽤用block.在多线 ...

随机推荐

  1. 讲一个关于RSA加密算法的故事

    有甲乙两个人,甲有两把钥匙,一把叫做甲的公钥,另一把叫做甲的私钥.乙同样有两把钥匙,一把叫做乙的公钥,另一把叫做乙的私钥. 某一天,甲乙成为了好朋友,甲想向乙发送一份保密数据,这份保密数据要求只有甲乙 ...

  2. 【题解】洛谷P1065 [NOIP2006TG] 作业调度方案(模拟+阅读理解)

    次元传送门:洛谷P1065 思路 简单讲一下用到的数组含义 work 第i个工件已经做了几道工序 num 第i个工序的安排顺序 finnish 第i个工件每道工序的结束时间 need 第i个工件第j道 ...

  3. asp.net mvc 如何在View中获取Url参数的值

    如果url是 /home/index?id=3 直接Request就ok. 但是如果路由设定为:{controller}/{action}/{id} url是 /home/index/3   这时想在 ...

  4. jQuery获取所有父级元素及同级元素及子元素的方法

    jQuery获取所有父级元素及同级元素及子元素的方法 1.获取父级元素 $("#id").parent() 获取其父级元素 $("#id").parents() ...

  5. 【Oracle】Oracle安装配置、创建数据库实例及用户和连接

    https://blog.csdn.net/wudiyong22/article/details/78904361 参考资料:https://www.cnblogs.com/hoobey/p/6010 ...

  6. IF()判断变量是否为空

    一 变量是字符串,判断为空 第一种:strs == null string strs = "test"; if (strs == null) { //这里是为空的字符串,返回你指定 ...

  7. POJ 3528--Ultimate Weapon(三维凸包)

    Ultimate Weapon Time Limit: 2000MS   Memory Limit: 131072K Total Submissions: 2430   Accepted: 1173 ...

  8. 三层架构,Struts2,SpringMVC实现原理图

    三层架构,Struts2,SpringMVC实现原理图 三层架构实现原理 Struts2实现原理 SpringMVC实现原理

  9. 用JQ实现的一个简单轮播

    <!DOCTYPE html><html><head> <meta charset="utf-8"> <title>lb ...

  10. Centos7 Redis3.0 集群搭建备忘

    (要让集群正常工作至少需要3个主节点,在这里我们要创建6个redis节点,其中三个为主节点,三个为从节点,对应的redis节点的ip和端口对应关系如下) 127.0.0.1:7000 127.0.0. ...