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. sourcetree创建分支与分支合并

    一.Sourcetree简单介绍 通过Git可以进行对项目的版本管理,但是如果直接使用Git的软件会比较麻烦,因为是通过一条一条命令进行操作的.  Sourcetree则可以与Git结合,提供图形界面 ...

  2. EasyUI使用之鼠标双击事件

    easyui鼠标双击事件,使用 onDblClickRow(index, row) 事件,在用户双击一行的时候触发,参数包括: index:点击的行的索引值,该索引值从0开始. row:对应于点击行的 ...

  3. spring bean中构造函数,afterPropertiesSet和init-method的执行顺序

    http://blog.csdn.net/super_ccc/article/details/50728529 1.xml文件 <bean id="aaa" class=&q ...

  4. hdu 1026 Ignatius and the Princess I(BFS+优先队列)

    传送门: http://acm.hdu.edu.cn/showproblem.php?pid=1026 Ignatius and the Princess I Time Limit: 2000/100 ...

  5. Visual Studio 中常用的快捷键

    项目相关的快捷键 Ctrl + Shift + B = 生成项目 Ctrl + Alt + L = 显示 Solution Explorer(解决方案资源管理器) Shift + Alt+ C = 添 ...

  6. 前端基础-CSS的属性相关设置

    一 字体属性 二 文本属性 三 背景属性 四 盒子模型 五 盒子模型各部分详解 一. 字体属性 1.font-weight:文字粗细(表格中*为重点) 取值 描述   normal 默认值,标准粗细 ...

  7. Java项目排查cpu负载高

    背景 我负责的其中一个项目在空负载的情况下,CPU占用率依然保持着100%左右,线上.测试.开发的服务都一样:是什么导致的呢?在开发环境我查看了请求流量,这个流量可以忽略但CPU占用率一直在60%-1 ...

  8. Swift_初始化

    #Swift_初始化 点击查看源码 初始化结构体 //初始化结构体 func testInitStruct() { //结构体 类中默认方法 struct Size { //宽 var width = ...

  9. L2-001 紧急救援(dijkstra算法)

    题目: 作为一个城市的应急救援队伍的负责人,你有一张特殊的全国地图.在地图上显示有多个分散的城市和一些连接城市的快速道路.每个城市的救援队数量和每一条连接两个城市的快速道路长度都标在地图上.当其他城市 ...

  10. 移动端利用canvas画布简单实现刮刮乐效果

    为了研究canvas一些属性简单实现的一个小效果  代码样式不太规范 随手写的 请问喷 初学者可以看下 css代码 <style> * { margin: 0; padding: 0; } ...