Objective-C Block数据类型 @protocol关键字
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关键字的更多相关文章
- 黑马程序员——Block数据类型
Block数据类型,又被称为代码段.因为它可以封装一段代码.苹果官方建议多用block.因为在多线程控制.异步任务,集合遍历.集合排序.动画转场等方面用的很多. Block的特点: 1.Block 用 ...
- 小白学开发(iOS)OC_ block数据类型(2015-08-08)
// // main.m // block数据类型 // // Created by admin on 15/8/12. // Copyright (c) 2015年 admin. All r ...
- Java基本数据类型、关键字
Java基本数据类型.关键字 一.Java基本数据类型 Java有8中基本数据类型:byte\char \short \int\float\double\long\boolean 在说明每种类型大小前 ...
- 黑马程序员_ Objective-c 之block、protocol学习笔记
一):block学习总结 block :用来保存一段代码. 1.block 特点: 1> Block封装了一段代码,可以在任何时候执行 2> Block可以作为函数或者函数的返回值, ...
- OC语言-06-OC语言-block与protocol
一.block 1> 基本使用 相当于用来存放代码的代码块 效率高 若没有形参可以省略小括号 2> block与函数的相同点 可以保存代码 可以有返回值 可以有形参 调用方式一样 3> ...
- block数据类型
// // main.m // 04-block数据类型 // // Created by apple on 14-3-18. // Copyright (c) 2014年 apple. Al ...
- OC - 6.block与protocol
一.block 1> 基本使用 相当于用来存放代码的代码块 效率高 若没有形参可以省略小括号 2> block与函数的相同点 可以保存代码 可以有返回值 可以有形参 调用方式一样 3> ...
- 「OC」block 和 protocol
一.block (一)简介 block 是什么?苹果推荐的类型,效率高,在运行中保存代码.用来封装和保存代码,有点像函数,block 可以在任何时候执行.在多线程.异步任务.集合遍历.集合排序.动 ...
- OC语言的Block与Protocol(协议)
Block ● Block封装了一段代码,可以在任何时候执⾏行 ● Block可以作为函数参数或者函数的返回值,⽽而其本⾝身又可以带输⼊入参数或返回值. ● 苹果官⽅方建议尽量多⽤用block.在多线 ...
随机推荐
- Spring 4 mvc+shiro+thymeleaf+JPA(Hibernate)+MySql eclipse项目模板
本模板基本配制为:spring 4.3.8+thymeleaf 3.0.3 +hibernate 5.5.5 + mysql 5.7 IDE:eclipse 运行环境为:Tomcat 8.0.28 项 ...
- 对IIS7经典模式和集成模式的理解(转载)
从IIS6新增应用程序池的概念,到现在IIS7,对HTTP请求处理功能已经越来越精确化和不断改善,IIS7应用程序池新增了经典模式和集成模式可供选择,不管官方还是一些书籍或文章都有介绍,但多数过于官方 ...
- 【前端框架-Vue-基础】$attr及$listeners实现跨多级组件的通信
父子 A 组件与 B 组件之间的通信: (父子组件) 如上图所示,A.B.C三个组件依次嵌套,按照 Vue 的开发习惯,父子组件通信可以通过以下方式实现: A to B 通过props的方式向子组件传 ...
- react系列(二)高阶组件-HOC
高阶组件 简单来说,高阶组件可以看做一个函数,且该函数接受一个组件作为参数,并返回一个新的组件. 我在之前的博客<闭包和类>中提到一个观点,面向对象的好处就在于,易于理解,方便维护和复用. ...
- Flask—10-项目部署(02)
项目部署 WEB工作原理 客户端(chrom) <=> WEB服务器(nginx) <=> WSGI(uWSGI) <=> Python(Flask) <=& ...
- 免安装版MySQL8数据库的安装
[环境准备] PC版本:Windows10企业版.64位操作系统 数据库:MySQL8.0.12-win64.zip免安装版 [彻底卸载已安装的MySQL数据库] 由于系统中MySQL数据库的卸载不彻 ...
- pt-online-schema-change在线修改表结构
工具简介 pt-osc模仿MySQL内部的改表方式进行改表,但整个改表过程是通过对原始表的拷贝来完成的,即在改表过程中原始表不会被锁定,并不影响对该表的读写操作.首先,osc创建与原始表相同的不包含数 ...
- 前端模块化小总结—commonJs,AMD,CMD, ES6 的Module
随着前端快速发展,需要使用javascript处理越来越多的事情,不在局限页面的交互,项目的需求越来越多,更多的逻辑需要在前端完成,这时需要一种新的模式 --模块化编程 模块化的理解:模块化是一种处理 ...
- docker build
nginx Docfile ----------------------- FROM centos MAINTAINER daniel RUN yum install -y wget RUN ...
- Dubbo 安装ZooKeeper环境
一.在Windows 安装ZooKeeper 1.下载ZooKeeper 2.解压,修改ZooKeeper配置文件 复制一份zoo_sample.cfg文件,改名位zoo.cfg,打开编辑,设置数据保 ...