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. 使用libcurl下载文件小例

    libcurl是一个很强大的开源网络处理库,支持包括HTTP.HTTPS.FTP……一系列网络协议.用它来进行HTTP的get\post 或者下载文件更是小菜一碟,chrome内核都用到了它,本文主要 ...

  2. Spring MVC 使用tomcat中配置的数据源

    Spring MVC 使用tomcat中配置的数据源 配置tomcat数据源 打开tomcat目录下的conf目录,编辑sever.xml目录.在<GlobalNamingResources&g ...

  3. [转]表单提交:button input submit 的区别

    博客转自于   http://harttle.com/2015/08/03/form-submit.html  ,同时自己做了稍微改动 最近项目代码中的表单提交的方式已经百花齐放了,现在用这篇文章来整 ...

  4. Excel批量导入商品,遇到导入失败记录到另一个Excel中供下载查看

    /// <summary> /// EXCEL批量导入 /// </summary> /// <param name="filePath">文件 ...

  5. 大数据框架-HDFS

    HDFS:分布式文件系统,运行文件通过网络在多台主机分享的文件系统,分块写入(128M),适用于一次写入多次查询,不支持并发写(只能一块一块写),小文件不合适. nameNode(主节点,单个): 保 ...

  6. (二、下) springBoot 、maven 、mysql、 mybatis、 通用Mapper、lombok 简单搭建例子 《附项目源码》

    接着上篇文章中 继续前进. 一.在maven 的pom.xm中添加组件依赖, mybatis通用Mapper,及分页插件 1.mybatis通用Mapper <!-- mybatis通用Mapp ...

  7. mount/umount命令

    挂载及卸载指定的文件系统 mount [选项] [-L<标签>] [-o<选项>] [-t<文件系统类型>] [设备名] [挂载点] umount [挂载点] -a ...

  8. mysql碰到的问题总结

    1.问题描述: 连接数据库出现大约10s延迟后才能连接,排除网络问题 解决方案: 通过抓包工具tcpdump抓包分析mysql在连接开始有近10s的空白请求,问题原因就在这 ,不知道在执行什么请求,后 ...

  9. jar包导入本地maven库的操作

    pom文件配置格式: <dependency> <groupId>A</groupId> <artifactId>B</artifactId> ...

  10. HTML5文本

    1.重要文本.斜体文本 粗体:<strong></strong> 粗体:<b></b> 斜体:<em></em> 斜体:< ...