博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
利用协议提供匿名对象
阅读量:6680 次
发布时间:2019-06-25

本文共 1941 字,大约阅读时间需要 6 分钟。

hot3.png

iOS中协议我们经常使用,今天通过学习又对协议有了新的认识,把它记录下来

学过Java的话肯定对抽象父类有所了解,抽象父类中定义了一些方法或者属性,但没有实现,他要求继承他的子类必须实现他的抽象方法。但是OC中没有该种语法,但是他提供了协议,通过协议,我们就可以实现类似的功能,下面就来看一下该种方式的使用
如果我们想定义一个车的类,车有车的属性和方法,所以要想成为车,就必须实现他的属性和方法,现在定义一个车的协议如下

#import 
/**定义车的协议,只要遵守该协议,就可以成为车**/@protocol LCCarProtocol
/*车名**/@property (nonatomic, copy) NSString *carName;/**开车**/- (void)carDrive;@end

上面的就类似与抽象父类,现在我们构建一个车的工厂类如下

//.h文件#import 
#import "LCCarProtocol.h"/**车的生产工厂**/@interface LCCarFactory : NSObject+ (instancetype)shareInstance;/**通过协议提供匿名对象,返回的车具体不知道是什么类型,我们不关注,只要是车就行**/- (id
)createCarWithName:(NSString *)carName;@end//.m文件实现#import "LCCarFactory.h"#import "LCCar.h"@implementation LCCarFactorystatic id instance;+ (instancetype)shareInstance { static dispatch_once_t predicate; dispatch_once(&predicate, ^{ instance = [[LCCarFactory alloc] init]; }); return instance;}- (id
)createCarWithName:(NSString *)carName { LCCar *car = [[LCCar alloc] init]; [car setCarName:carName]; return car;}@end

注意,上面.m实现文件中用到了一个LCCar.h这个类,他就是遵守了我们刚才定义的那个车的协议,所以他就一个车,相当于抽象父类的具体实现子类,下面给出LCCar类的代码

//.h文件#import 
#import "LCCarProtocol.h"/**想要成为车,需要遵守车的协议,该类可以不对外公开*/@interface LCCar : NSObject
@end//.m文件实现#import "LCCar.h"@interface LCCar () { NSString *_carName;}@end@implementation LCCar//实现协议中开车方法- (void)carDrive { NSLog(@"%@ is driving。。。。",_carName);}//实现协议中属性的get set方法- (NSString *)carName { return _carName;}- (void)setCarName:(NSString *)carName { _carName = [carName copy];}@end

这样我们就实现类似于抽象父类的概念,同时在创建车时,无需关心(也可以说成时候隐藏了)车的类型,只要是遵守了车的协议即可

NSLog(@"*********通过协议提供匿名对象*********");LCCarFactory *factory = [LCCarFactory shareInstance];id
car = [factory createCarWithName:@"火车"];[car carDrive];//打印结果如下*********通过协议提供匿名对象*********火车 is driving。。。。

自己学习的一点小体会,记录了下来,分享出来

转载于:https://my.oschina.net/dahuilang123/blog/687802

你可能感兴趣的文章
ubuntu 为rabbitmq安装web插件管理界面(为了远程查看rabbitmq) 分类...
查看>>
1.4 注册系统的逻辑与结构
查看>>
NOIP模拟2017.6.11解题报告
查看>>
Scramble String
查看>>
Linux基础:CentOS安装python3.7
查看>>
Daily Scrum: 2012/11/27
查看>>
vue学习中v-if和v-show一起使用的问题
查看>>
获取一个月前的当前时间
查看>>
第三期 预测——1.简介
查看>>
behavior planning——12.example cost funtion -lane change penalty
查看>>
基于 Spring + Atomikos + Mybatis的多数据源配置demo
查看>>
随笔-刚毕业找工作的点滴(程序员)
查看>>
利用poi3.8中SXSSFWorkbook实现大数据量导出excel
查看>>
day34-1 面向对象概述
查看>>
GCD之dispatch queue
查看>>
【Oracle】-初识PL/SQL
查看>>
黄聪:超实用的PHPExcel[导入][导出]实现方法总结
查看>>
模板变量,过滤器和静态文件引入
查看>>
Oracle 中的 Schema
查看>>
Web APi之认证(Authentication)两种实现方式后续【三】(十五)
查看>>