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.在多线 ...
随机推荐
- hdu 1520 Anniversary party(第一道树形dp)
传送门: http://acm.hdu.edu.cn/showproblem.php?pid=1520 Anniversary party Time Limit: 2000/1000 MS (Java ...
- ffmpeg教程
转:http://blog.sina.com.cn/s/blog_51396f890100nd91.html 概要 电影文件有很多基本的组成部分.首先,文件本身被称为容器Container,容器的类 ...
- 修改本机默认的jdk版本
因为开发需要使用多个jdk,在修改jdk版本时遇到了一些问题 在系统变量的%JAVA_HOME%中修改了jdk的路径,但是重启后java -version版本并没有改变. 在网上找到一篇文章,修改了注 ...
- Ubuntu16 安装Anaconda3+tensorflow cpu版
打开火狐浏览器,下载anaconda安装包,网址:https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/?C=M&O=D 下载完成,到Do ...
- Redis支持的五种数据类型
redis支持的五种数据类型: 1.string(字符串) 2.hash(哈希) Redis hash 是一个键值(key=>value)对集合. Redis hash是一个string类型的f ...
- Python基础知识--Slice(切片)和Comprehensions(生成式)
最近在Youtube的Python视频教程上学习Python相关的基础知识,视频由Corey Schafer制作,讲得十分简单明了,英文发音也比较清晰,几乎都能听懂,是一个不错的Python入门学习的 ...
- 【memcached启动报错】
#前台启动不了 #指定-u root #后台启动 #扩展选项: #利用telnet连接memcached 的端口登录memcached服务 #error表示有语法错误 #store表示正确
- 用Head方法获得百度搜索结果的真实地址
用Head方法获得百度搜索结果的真实地址 在百度中搜索"Java",第一条结果的链接为: https://www.baidu.com/link?url=HBOOMbhPKH4SfI ...
- thinkphp 5.1/tp5.1 route路由bug
tp5.1下面RuleItem类中,match方法. 如果同一个控制器下面,写了两个路由,后一个路由比包含前一个路由,则访问后一个路由地址的时候,会跳转到前面定义的那个路由
- 常见IE8兼容性问题及解决
1.css3媒体查询 IE8不支持媒体查询 解决:respond.js,在页面中所有css文件的引用位置之后引用Respond.js 2.HTML5新标签 IE8不支持H5新标签 解决:html5sh ...