黑马程序员——oc加强学习(协议)
来源:互联网 发布:纸飞机软件exe 编辑:程序博客网 时间:2024/05/22 13:13
------- android培训、java培训、期待与您交流! ----------
什么是协议?
一些方法的声明,一般写到一个.h的头文件中
方法有两种:
1)必须实现
2)选择实现
协议的作用;
供其他的类去遵守,
如果一个类遵守了一个协议,就应该实现这个协议中定义的必须要实现的方法
如何定义一个协议:
@protocol xxx<NSObject>
@end
类遵守协议的格式:
1)遵守一个协议:
先导入头文件
@interface 类名:NSObject<xxx>
@end
2)遵守多个协议
@interface 类名:NSObject<xxx,aaa,bbb>
@end
workProtocol.h文件
#import <Foundation/Foundation.h>@protocol workProtocol <NSObject>-(void)work;@end
baseProtocol.h文件
//定义一个协议#import <Foundation/Foundation.h>//基础协议//eat run//Person 采纳这个协议//使用协议的流程://定义协议//让类遵守这个协议//实现协议中对应#import "workProtocol.h"@protocol baseProtocol <NSObject,workProtocol>//声明一些方法-(void)eat;-(void)run;@end
Person.h文件
#import <Foundation/Foundation.h>//1.导入头文件//2.遵守协议//3.实现方法#import "baseProtocol.h"//#import "workProtocol.h"//当我们遵守了某个协议后,就有了协议中方法的声明@interface Person : NSObject<baseProtocol>@end
Person.m文件
#import "Person.h"@implementation Person-(void)eat{ NSLog(@"正在吃"); }-(void)run{ NSLog(@"跑得快");}-(void)work{ NSLog(@"努力工作");}@end
main.m文件
#import <Foundation/Foundation.h>#import "Person.h"int main(int argc, const char * argv[]) { @autoreleasepool { Person *p = [Person new]; [p eat]; [p run]; [p work]; } return 0;}
@required和@optional关键字
#import <Foundation/Foundation.h>@protocol baseProtocol <NSObject>//@required和@optional都是协议中的关键字//@required修饰的方法是必须要实现的//默认情况下都是必须要实现的@required-(void)run;-(void)eat;//@optional修饰的方法是可以选择实现@optional-(void)dajia;@end
@protocol类型限制
#import <Foundation/Foundation.h>#import "Girl.h"#import "Dog.h"#import "houseHoldProtocol.h"int main(int argc, const char * argv[]) { @autoreleasepool { Dog *d = [Dog new]; Girl *mm = [Girl new]; //增加类型限制 //第一种类型限制:给id类型增加限制 //id<houseHoldProtocol> obj; //增加<houseHoldProtocol> 以后,表示,obj只能赋值遵守了这个协议的对象 id <houseHoldProtocol> obj = mm; //第二种类型限制 //表示,obj2赋值的时候,必须是Girl对象,并其遵守了协议。 Girl<houseHoldProtocol> *obj2 = mm; //第三种类型限制 obj2.dog = d; } return 0;}
id和instancetype的区别
1)instancetype只能作为函数或方法的返回值
2)id能作为方法或者函数的返回值、参数类型,也能用来定义变量
3)instancetype对比id的好处
能精确的限制返回值的具体类型
protocol代理设置模式概念
代理模式的应用场合
1.监听器的场合
teacher想监听baby 的一些行为
2.通知的场合
baby发生了一些行为,想告知teacher
3.有些事情,自己不能做
0 0
- 黑马程序员——oc加强学习(协议)
- 黑马程序员——oc加强学习(block)
- 黑马程序员——oc加强学习(内存管理)
- 黑马程序员--学习OC加强内存管理
- 黑马程序员——ios学习笔记 OC 协议&Block
- 黑马程序员—IOS加强视频—oc内存管理
- 黑马程序员——OC语言加强---@property参数
- 黑马程序员——OC语言加强---autorelease基本使用
- 黑马程序员——OC语言加强---block的typedef
- 黑马程序员——OC语言加强---Foundation框架介绍
- 黑马程序员——OC语言加强---NSRange使用
- 黑马程序员—— OC加强---ARC+Category+Block
- 黑马程序员—— OC加强---对象的拷贝
- 黑马程序员——OC基础---协议
- 黑马程序员——java加强学习
- 黑马程序员-OC加强-Block
- 黑马程序员-OC学习笔记-----协议、代理
- [黑马程序员][OC]协议
- Git 解决冲突
- 数组
- 查询比105号员工工资高的员工的员工号,员工名,员工工资信息
- mysql 连接数据库实例java代码
- nyoj 括号匹配(二) 15 (区间dp) 好题
- 黑马程序员——oc加强学习(协议)
- 研究生第一个月学习y我喜欢看博客总结
- 黑马程序员-----设计模式
- Io 异常 The Network Adapter could not establish the connection的三种解决方法
- Jpype的使用
- mongodb中如何创建数据库
- 由微信推送引发的SQL join语句总结,顺便复习一下下MySQL
- 【总述】软件工程
- 异常