IOS征途之三 分类与协议(二)
2015-09-17 20:48
501 查看
本来分类和协议应该是放在同一篇来写的,可是最近有点小感冒,这两天不在状态,于是现在补上。
协议(protocol)
1.在我看来,目前而言,IOS的协议其实是与Android的接口是同一个概念,包括作用与实现。其作用很好的规范了对象们属性的统一性。
2.前段时间在一个线下活动中听说swift主张面向协议编程,当时百思不得其解,后来才明白其实也就等同于面向接口编程。其实与面向对象的思想并不相悖。
3.protocol中有个可选属性optional的概念,在这里不太明白:对等java中似乎没有这个属性,在此也思考是否有存在这个属性的必要,如果这个方法是可选的,为什么不将它写在父类中,而要写在协议里,这样岂不是有悖于其统一性的初衷了吗?
写了个小demo,代码如下:
基类
#import <Foundation/Foundation.h> @interface animals : NSObject -(BOOL) isBelongAnimals; @end #import "animals.h" @implementation animals -(BOOL)isBelongAnimals { return true; } @end
protocol
#import <Foundation/Foundation.h> #import "animals.h" @protocol animalHabits -(void) eat; -(void) sleep; @optional -(BOOL)isLazy; @end #import "animalHabits.h" @implementation animalHabits : NSObject @end
Panda
#import <Foundation/Foundation.h> #import "animals.h" #import "animalHabits.h" @interface Panda : animals <animalHabits> @end #import "Panda.h" @implementation Panda //因为实现了animalHabits这个协议(接口),所以sleep 和 eat方法必须实现,否则会报错 //接口在此作为一个方法统一的作用,因为每一个动物都需要去吃饭和睡觉 -(void)sleep { NSLog(@"Panda always sleeping 14 hours every day!"); } -(void)eat { NSLog(@"Panda favorite food is bamboo!"); } -(BOOL)isLazy { NSLog(@"Panda is very lazy!"); return true; } @end
Dog
#import <Foundation/Foundation.h> #import "animalHabits.h" #import "animals.h" @interface Dog : animals<animalHabits> -(void)skill; @end #import "Dog.h" @implementation Dog -(void)sleep { NSLog(@"dog always sleep for 6 hours a day"); } -(void)eat { NSLog(@"dog like bone!"); } -(void)skill { NSLog(@"dog can protect our house!"); } @end
main.m
#import <Foundation/Foundation.h> #import "Panda.h" #import "Dog.h" int main(int argc, const char * argv[]) { @autoreleasepool { Panda *panda = [[Panda alloc] init]; if ([panda isBelongAnimals]){ [panda sleep]; [panda eat]; } Dog *dog = [[Dog alloc] init]; [dog skill]; } return 0; }
输出结果:
2015-09-17 20:43:53.300 Lesson4[610:303] Panda always sleeping 14 hours every day! 2015-09-17 20:43:53.302 Lesson4[610:303] Panda favorite food is bamboo! 2015-09-17 20:43:53.303 Lesson4[610:303] dog can protect our house! Program ended with exit code: 0
相关文章推荐
- ios 爱行华夏 技术支持
- iOS开发-获取设备电量
- ios9键盘回调与消息通知,理论上应该是个bug
- iOS开发-浅解runtime
- iOS开发—几种定时器
- iOS-多线程之GCD
- iOS疯狂讲解之加载视图的好处
- iOS程序main函数之前发生了什么
- iOS中的瀑布流(RootCollectionViewControlle)
- iOS-文件断点续传
- iOS开发中通过点击按钮异步加载图片
- ios-线程间的通信之下载图片
- iOS中 沙盒(sandbox)与归档(NSKeyedArchiver)
- iOS中NSThread(主线程,子线程)
- iOS NSString utf-8 Unicode互转
- iOS中的串行,并行,分组,一次,障碍,延迟,反复执行(GCD)
- 蓝懿iOS培训日志15 tableView和自定义Cell(1)
- iOS 9, Xcode 7,免费使用真机测试
- iOS中的动画
- iOS简单的数据持久化