黑马程序员——Objective-C——block和protocol
来源:互联网 发布:怎么骗取淘宝运费险 编辑:程序博客网 时间:2024/06/05 06:49
———Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ———
一、block
苹果官方建议尽量多用block。在多线程、异步任务、集合遍历、集合排序、动画转场用的很多
1.作用
1>block封装了一段代码,可以在任何时候执行
2>block可以作为函数参数或者函数的返回值,而其本身又可以带输入参数或返回值。
2.block的定义
int (^sumBlock) (int ,int) = ^(int a,int b){ // 注意前面的两个括号以及^的位置return a+b; // int型需要有返回值,返回值类型也为int}// block的调用int sum = sumBlock (3,4); // 调用时不需要用^// 错误写法:int a = 3;int (^myBlock)(int ) = (int num ){a ++; // block不可以改变局部变量的值,只可以访问return num + a;}// 如果想要修改,a定义时需要这样写:__block int a = 3; // block是两条下划线
3.使用typedef定义block
typedef int (^myBlock)(int ,int); // 和指针函数类似,myBlock即为定义的新名// 调用blockmyBlock sumBlock = ^(int a,int b){ // 求和return a+b;}myBlock minusBlock = ^(int a,int b){ // 求差return a-b;}
4. block的应用
// 使用一个block返回和、差int (^myBlock)(int ,int,int *) = ^(int a,int b,int *p){*p = a-b; // 利用指针求出差return a+b; // 返回和}int sum,minus; // 定义和、差得变量,用于接收结果sum = myBlock(4,5,&minus); // 传入minus的地址NSLog(@”sum = %d, minus = %d”,sum,minus); // 打印结果为sum = 9,minus = -1
二、protocol(协议)
1.作用
1> 用来声明一大堆方法(没有.m),但是不能定义成员变量
2> 只要某个类遵守了协议,就拥有协议的所有方法
3> 父类遵守了协议,子类也自动遵守
2.基本格式
// 编写一个协议@protocol 协议名 <NSObject>// 方法声明@end// 类中协议的遵守@interface 类名 :父类名 <协议名>@end// 协议遵守协议@protocol 协议名 <遵守协议名1,遵守协议名2>// 方法声明@end// 定义变量时遵守某个协议id<协议名> obj;Person <协议名> *person;// property定义属性时的使用@protocol (nonatomic, strong) id <协议名> obj;@protocol (nonatomic, strong) Person<协议名> *person;
3.协议中的关键字
@required:说明该方法需要实现(但是不实现也不会报错,只是警告)
@optional: 可以不实现
关键字多用于程序员之间的交流
4.代理模式的代码练习
// 情景简述:经理有一份差事,自己不想去做,找别人去做>。// 下面为主要代码// 协议protocol@protocol MyProtocol <NSObject>- (void)doSth;@end// Boss类#import “MyProtocol.h”@interface Boss : NSObject <MyProtocol> // 类遵守协议@property id<Myprotocol> delegate; // 定义一个代理属性,遵守协议- (void)result; // 定义自己的方法@end@implementation Boss- (void)result{[delegate doSth]; // 调用代理的方法NSLog(@”通过代理的帮忙,完成了该任务”);}@end// 做事的人@interface Worker : NSObject <MyProtocol>@end@implementation- (void)doSth // 协议方法的实现{NSLog(@”工人完成了任务”);}@end// main.m中// 分别创建老板和工人对象Boss *b = [[Boss alloc] init];Worker *w = [[Worker alloc] init];// 工人对象作为老板的代理属性b.delegate = w;// 老板调用自己方法[ b result];
0 0
- 黑马程序员—Objective-C学习—block和protocol
- 黑马程序员--Objective-C——Block与@protocol
- 黑马程序员——Objective-C——block和protocol
- 黑马程序员——Objective-c——block和protocol
- 【黑马程序员】iOS学习之路——Objective-C之protocol和block
- 黑马程序员————Objective C——protocol、block
- 黑马程序员——Objective-C——block与protocol
- 黑马程序员——Objective-C语言知识点总结之内存管理、Block、Protocol
- 黑马程序员——block与protocol
- 黑马程序员——OC—block和protocol协议
- 黑马程序员——block和protocol小结
- 黑马程序员——OC语法 block和protocol
- 黑马程序员员—OC(block和protocol)
- 黑马程序员——Objective--C笔记Category、block
- Objective-C—autorelease、ARC、block、protocol(协议)
- 黑马程序员——OC基础04—block、protocol
- 黑马程序员——OC之ARC、Block、Protocol
- 黑马程序员——OC基础---block,protocol
- 高效程序员的 7 个共同特征
- 串口 COM口 TTL RS-232 RS-485 区别 释疑
- java.lang.OutOfMemoryError: PermGen space修改启动配置的解决方式
- Android数据库工作笔记
- two moon datasets
- 黑马程序员——Objective-C——block和protocol
- nginx 优化之缓存技术
- C/C++中变量的可见性与生命期区别的本质原因
- 如何使EnableMenuItem函数的调用有效
- Java—解析XML的几种方式
- 程序猿开发生活的十大禁忌
- 解决IllegalStateException: Can not perform this action after onSaveInstanceState
- ImageView的ScaleType属性实例
- C/C++中extern的用法