@fiy-fish
2015-07-19T18:23:03.000000Z
字数 1785
阅读 1187
未分类
// main.m
// 公司
//
// Created by Aaron on 15/7/13.
// Copyright (c) 2015年 Aaron. All rights reserved.
//
#import <Foundation/Foundation.h>
//创建一个公司类,需要招聘编写IOS代码的家伙
#import "Company.h"
#import "Person.h"
int main(int argc, const char * argv[]) {
@autoreleasepool {
Company *c = [[Company alloc] init];
Person *p = [[Person alloc] init];
id <WriteIOSCode> obj = p;
//[obj compare:@2];
//[obj writeIosCode];
//[c addSomeOne:obj];
//[c addSomeOne:nil];
//可以用遵循协议少的指针指向遵循协议多的对象
[c addAnOther:p];
}
return 0;
}
#import <Foundation/Foundation.h>
#import "Company.h"
#import "Eat.h"
//遵循协议
//让对象同时遵循两个协议
@interface Person : NSObject <WriteIOSCode,WriteAndroidCode,Play>
//如果遵循了子协议,那么父协议也遵循了,所以要把父协议的方法也实现掉
@end
#import "Person.h"
@implementation Person
-(void)writeIosCode
{
NSLog(@"人帮公司写IOS代码");
}
-(void)writeAndroidCode
{
NSLog(@"人帮公司写安卓代码");
}
-(void)eatFruit
{
NSLog(@"吃水果");
}
-(void)playLOL
{
NSLog(@"打撸啊撸");
}
@end
#import <Foundation/Foundation.h>
@protocol WriteIOSCode <NSObject>
-(void)writeIosCode;
@end
@protocol WriteAndroidCode <NSObject>
-(void)writeAndroidCode;
@end
@protocol IOSAndAndroidCode <WriteIOSCode,WriteAndroidCode>
@end
@interface Company : NSObject
-(void)addSomeOne:(id <WriteIOSCode>)obj;
//同时遵循两个协议,协议中间用,隔开
-(void)addAnOther:(id <WriteIOSCode,WriteAndroidCode>)obj;
@end
#import "Company.h"
@implementation Company
-(void)addSomeOne:(id <WriteIOSCode>)obj
{
[obj writeIosCode];
}
-(void)addAnOther:(id <WriteIOSCode,WriteAndroidCode>)obj
{
[obj writeIosCode];
[obj writeAndroidCode];
}
@end
#import <Foundation/Foundation.h>
//将协议单独分到文件里面
//NSObject 基协议
//当没有明确的父协议需要遵循的时候,直接遵循基协议
@protocol Eat <NSObject>
@required //必须实现的方法(默认缺省的值)
-(void)eatFruit;
@optional //可选择性实现的方法
//实际在开发的过程中,没办法保证其他人严格按照语法来,所以我们通常都会做检测,看是否实现了协议的方法
@end
//协议的方法自己可以不实现,让遵循的对象来实现
//通常被用在统一接口的地方,所以和实例变量无关,也就是协议里面不能定义实例变量
//继承统一接口:
//都可以实现接口统一, 子类继承父类,其实产生了一个新的类,还可以添加实例变量
//协议统一接口:
//不会产生新的类,也不会添加新的属性
@protocol Play <Eat>
-(void)playLOL;
@end