IOS征途之三 分类与协议(二)

 本来分类和协议应该是放在同一篇来写的,可是最近有点小感冒,这两天不在状态,于是现在补上。

协议(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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值