OC学习笔记十---Block与@protocol
来源:互联网 发布:linux 查看文件行数 编辑:程序博客网 时间:2024/05/22 00:53
一、Block
1.Block简介
Block是一种数据类型,封装了一段代码,可以在任何时候执行。Block可以在程序运行时保存一段代码(函数不行)。Block跟函数一样,有返回值,形参。
2.Block使用方法
Block:
以“^{ 要保存的代码块 }”表示一段Block
Block变量:
以“返回值类型 (^Block名称)(形参类型)”表示一个Block类型的变量。和以前学过的C语言的指向函数的指针很像。如果没有形参,则(形参类型)可以省略。
用Block变量调用Block里面的内容:
Block名称();
没有返回值和形参的Block:
#import <Foundation/Foundation.h> int main(int argc, const char * argv[]){ void (^myBlock)() = ^{ NSLog(@"要保存的代码块!"); }; myBlock(); return 0;}
带形参和返回值的Block:
#import <Foundation/Foundation.h> int main(int argc, const char * argv[]){ int (^sumBlock)(int, int) = ^(int a, int b){ return a + b; }; NSLog(@"%d", sumBlock(3, 6)); return 0;}
3.使用typedef定义block类型
每次我们要定义一个block类型变量,都要写一大串代码,利用C语言中的typedef函数可以简化我们的定义。
#import <Foundation/Foundation.h>typedef int (^MyBlock)(int, int);int main(int argc, const char * argv[]){ MyBlock sumBlock = ^(int a, int b){ return a + b; }; NSLog(@"%d", sumBlock(3, 6)); return 0;}
4.Block访问外面变量
默认情况下,Block对外面变量是只读的,如果想要某个变量能在Block内部修改,需要在变量前加上__block关键字。如__block int sum = 10;
二、@protocol
1.protocol简介
Protocol是意思是协议。在计算机网络课程中,我们学过各种网络协议。OC中的@protocol可以类比着学习,protocol在OC中的作用就是声明一堆方法。
2.创建方法
和创建类类似,右击项目,在New File中选择Objective-C Protocol,然后给协议取个名字即可。
3.使用方法
1)协议的编写:
@protocol 协议名称
@关键字
方法声明
@end
关键字有@required和@optional
@required要求遵守协议的类必须实现,@optional是可选实现,默认是@required
2)某个类遵守协议(可遵守多个):
@interface 类名 : 父类 <协议名称1,协议名称2>
@end
4.协议间的遵守,基协议
和类的继承、基类类似,一个协议遵守了其他协议,就相当于拥有了其他协议中的方法声明,和类不同的是,一个协议可以遵守多个协议。
@protocol 协议名称 <协议1, 协议2>
@end
和基类一样,基协议名称也叫NSObject。打开NSObject.h
发现里面有我们内存管理方法的声明,可是我们之前学内存管理的时候没有用过基协议呀?
那是因为,基类本身继承了基协议,我们继承基类,也就默认遵守了基协议。
5.定义变量时指定协议
// NSObject类型的对象,并且要遵守MyProtocol协议NSObject<MyProtocol> *obj;// 任何OC对象,并且要遵守MyProtocol协议id<MyProtocol> obj;// 调用set方法要遵守MyProtocol协议@property (nonatomic, strong) id<MyProtocol> obj;
当赋值给obj的对象不遵守MyProtocol时,编译器就会发出严重警告
最后需要补充的是,在类里面我们学过,如果编译器不需要用到类里面的内容,只需要知道它是一个类,使用@class关键字。协议同样也有这种用法,在只需要知道协议的地方不用#import,使用@protocol,在真正用到协议里面方法声明的文件里,才用#import。
- OC学习笔记十---Block与@protocol
- OC学习之 block与Protocol
- OC学习之 block与Protocol
- 黑马程序员- IOS学习笔记-OC ARC、BLOCK、protocol
- OC学习笔记九 Protocol、Block、成员变量-补充
- objective-C学习笔记(六):OC之block和protocol
- 黑马程序员--oc:block与protocol
- OC学习笔记之protocol
- OC学习笔记七 Protocol
- OC中Block、protocol
- OC--block,@protocol协议
- oc -8 Block protocol
- 黑马程序员——OC学习笔记07 Block 和 protocol协议。
- OC学习笔记之block
- OC学习笔记八 Block
- OC学习笔记10--Block的概念与使用方式
- 黑马程序员-OC笔记(六)ARC Block protocol
- ios开发-OC中ARC、block和protocol的学习
- poj 1905 Expanding Rods (二分查找)
- 【SzNOI语法百题】【d020】约数之和
- 多线程设计模式读书笔记(一)
- 安装Yum时Header V3 DSA signature: NOKEY, key ID e8562897
- 数塔问题
- OC学习笔记十---Block与@protocol
- Unity3D研究院之IOS触摸屏手势控制镜头旋转与缩放
- 第二十五次codeforces竞技结束 #285 Div 2
- Leetcode -- Permutation II
- EF框架step by step(1)—Database-First
- 我的IMUz之路第四天
- redis study
- 解决Matlab在Mac Yosemite下无法启动
- POJ 3279 Fliptile(kuangbin带你飞 专题一:简单搜索)