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.在多线 ...
随机推荐
- 【poj Roads in the North】 题解
题目链接:http://poj.org/problem?id=2631 求树的直径模板. 定理: 树上任意一个点的在树上的最长路一定以树的直径的两端点其中一点结束. 做法: 两边bfs,第一次先找到n ...
- Android杀死进程方法
1. android.os.Process.killProcess(pid) 只能终止本程序的进程,无法终止其它的 具体代码如下: ?12 Process.killProcess(Process.my ...
- Non-Nullable Types vs C#: Fixing the Billion Dollar Mistake (转载)
One of the top suggestions (currently #15 on uservoice) for improving C# is the addition of non-null ...
- jQuery mouseove和mouseout事件不断触发
关于锋利的jQuery第三章结尾提示图片效果(鼠标放在图片上会出现一个大图跟随鼠标移动)实现时mouseove和mouseout事件不断触发的问题 html <ul class="bo ...
- 复习宝典之SpringMVC
查看更多宝典,请点击<金三银四,你的专属面试宝典> 第七章:SpringMVC MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(co ...
- 让 shell(bash) 命令行显示当前 git 的分支名称
早上测试脚本的时候,偶然在这篇文章<Git – setting up a remote repository and doing an initial push>看到一个关于 git 的好 ...
- TinyMCE插件:Filemanager [4.x-6.x] 图片自动添加水印
上传图片程序(filemanager/upload.php) 在if (!empty($_FILES) && $upload_files)有一个move_uploaded_file() ...
- php的基础知识(二)
7.系统常量: 常量的定义:常量是程序运行的时候是不可以改变的量 定义格式:define(‘常量名字’,‘常量的值’): 注意: ·不能重复定义 ·常量的名字最好用大写字母. ·常量的值只能是标量. ...
- python django-admin startproject django-admin命令未找到
在使用pip install安装django后使用django-admin生成项目失败解决办法 1.配置环境变量-在系统环境变量path添加后运行 D:\Program Files (x86)\pyt ...
- django创建第一个视图-4
创建视图 打开 demo 应用下的 views.py 文件,添加代码 from django.http import HttpResponse from django.shortcuts import ...