OC实战: 抽象类的实现
来源:互联网 发布:性价比 实木家具 知乎 编辑:程序博客网 时间:2024/04/30 14:06
这里, 假设你已经明白了
* oc 的继承.
* oc 的多态.其实 oc 里面的方法都是虚方法.
* oc 的协议 protocol.
------------------------------------------------------------------
在多人协助的项目开发中, 一般在设计框架的时候, 我们会约定一些协议, 这些协议是必须要在子类里面实现的.
但是, 有些队友会忘记去实现, 导致一些莫名其妙的问题.
那么, 如果我们能实现类似 c++ 或者 java 的抽象类, 就在一定程度上可以避免这种问题的发生.
------------------------------------------------------------------
今天. 主要跟大家分享一下, 实现抽象类的思路.~
DownloaderProtocol.h 协议
#import <Foundation/Foundation.h>@protocol DownloaderProtocol <NSObject>@required- (BOOL)checkDownloader;- (void)startDownload:(id)url;- (void)stopDownload;- (void)deleteAllDownloadFile;@end
AbstractDownloader.h
#import <Foundation/Foundation.h>#import "DownloaderProtocol.h"@interface AbstractDownloader : NSObject <DownloaderProtocol>- (void)setDownloadUrl:(NSString *)url;@end
AbstractDownloader.m
#import "AbstractDownloader.h"#define AbstractMethodNotImplemented() \@throw [NSException exceptionWithName:NSInternalInconsistencyException \reason:[NSString stringWithFormat:@"You must override %@ in a subclass.", NSStringFromSelector(_cmd)] \userInfo:nil]@implementation AbstractDownloader- (instancetype)init{ NSAssert(![self isMemberOfClass:[AbstractDownloader class]], @"AbstractDownloader is an abstract class, you should not instantiate it directly."); return [super init];}- (BOOL)checkDownloader{ AbstractMethodNotImplemented();}- (void)startDownload:(id)url{ AbstractMethodNotImplemented();}- (void)stopDownload{ AbstractMethodNotImplemented();}- (void)deleteAllDownloadFile{ AbstractMethodNotImplemented();}- (void)setDownloadUrl:(NSString *)url{ NSLog(@"AbstractDownloader's url = %@", url);}@end
看一下具体实现类.
ImageDownloader.h
#import "AbstractDownloader.h"@interface ImageDownloader : AbstractDownloader@end
ImageDownloader.m
#import "ImageDownloader.h"@implementation ImageDownloader- (BOOL)checkDownloader{ NSLog(@"ImageDownloader checkDownloader..."); return YES;}- (void)startDownload:(id)url{ NSLog(@"ImageDownloader startDownload...");}- (void)stopDownload{ NSLog(@"ImageDownloader stopDownload...");}- (void)deleteAllDownloadFile{ NSLog(@"ImageDownloader deleteAllDownloadFile...");}@end
完成了继承抽象类并实现其方法的条件.
使用
ImageDownloader *downloader = [[ImageDownloader alloc] init]; [downloader setDownloadUrl:@"url://www.url.com.cn.ht"]; [downloader checkDownloader]; [downloader startDownload:nil]; [downloader stopDownload]; [downloader deleteAllDownloadFile];
Have fun...
2 0
- OC实战: 抽象类的实现
- c++抽象类实现OC中的协议
- OC学习笔记之OC类的设计练习实战
- 实现抽象类内部的抽象方法
- python抽象类、抽象方法的实现
- Accessible抽象类的实现
- C++抽象类的实现
- 抽象类、抽象方法、接口的区别及实现
- OC一个类的声明和实现
- oc中类的具体实现方法
- oc--类的声明和实现
- OC语言 类方法的实现
- oc中的类的声明和实现
- OC 练习题 实现以下的类
- OC----类的声明,实现与调用
- 实现接口的抽象类的用处
- 接口的重实现与抽象类
- 抽象类实现接口的意义
- 对新买树莓派的硬件检查
- VS2012编译出来的程序,在XP上不能运行的原因
- linux 命令 wget
- 第一天开始写博客
- 字符串和字符数组的区别以及sizeof和strlen的区别
- OC实战: 抽象类的实现
- win8命令提示符怎么以管理员方式打开
- 关于 Android Studio 鼠标中键的一些技巧
- JSP中特殊字符处理
- vc如何在GUI界面下显示命令窗
- webp格式图片
- Linux Makefile学习(二)
- Back Track下建立“钓鱼”热点测试
- 294 - Divisors(唯一分解定律)