IOS征途之三 分类与协议(二)
来源:互联网 发布:招在家工作淘宝客服 编辑:程序博客网 时间:2024/05/01 20:46
本来分类和协议应该是放在同一篇来写的,可是最近有点小感冒,这两天不在状态,于是现在补上。
协议(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
0 0
- IOS征途之三 分类与协议(二)
- IOS征途之三 分类与协议
- IOS征途之二 OC实现继承
- Hibernate征途(二)之基础与核心
- IOS面试题之委托,协议与分类
- Runtime之分类与协议
- IOS征途之C语言-学习IOS开发工具Xcode的笔记与总结
- Hibernate征途(三)之CRUD
- iOS学习笔记56(Runtime)-Objective-C Runtime 运行时之五:协议与分类
- OC学习Runtime之协议与分类
- oc学习笔记之协议与分类
- iOS:分类、协议、代理
- ios学习(三) 谈谈协议与委托
- 编写高质量iOS与OS X代码的52个有效的方法 之协议与分类
- IOS征途之c语言-C语言简介与第一个C语言程序笔记与总结
- 黑马程序员-IOS学习笔记(八)分类与协议
- ios学习路线—Objective-C(Runtime 协议与分类)
- ios学习笔记(二)之协议
- 2015.9.17 initWithName构造函数补充
- HDU 3507 Print Article(斜率优化DP)
- 美团面试失败总结
- 1/ 向上转型
- python基础之五种数据类型--2
- IOS征途之三 分类与协议(二)
- mac下 eclipse+hadoop2.6.0完全配置,实例验证
- Destroying The Graph (poj 2125 最小点权覆盖)
- python基础教程
- shell如何将文本文件字符串换行后转换为数组
- C++容器deque
- 解决properties文件乱码问题
- Fire Game [kuangbin带你飞]专题一 简单搜索
- C语言 输入n,分别用*输出边长为n的实心菱形和空心菱形