[关闭]
@fiy-fish 2015-07-19T18:23:03.000000Z 字数 1785 阅读 1187

day09-02-协议-公司

未分类


  1. // main.m
  2. // 公司
  3. //
  4. // Created by Aaron on 15/7/13.
  5. // Copyright (c) 2015年 Aaron. All rights reserved.
  6. //
  7. #import <Foundation/Foundation.h>
  8. //创建一个公司类,需要招聘编写IOS代码的家伙
  9. #import "Company.h"
  10. #import "Person.h"
  11. int main(int argc, const char * argv[]) {
  12. @autoreleasepool {
  13. Company *c = [[Company alloc] init];
  14. Person *p = [[Person alloc] init];
  15. id <WriteIOSCode> obj = p;
  16. //[obj compare:@2];
  17. //[obj writeIosCode];
  18. //[c addSomeOne:obj];
  19. //[c addSomeOne:nil];
  20. //可以用遵循协议少的指针指向遵循协议多的对象
  21. [c addAnOther:p];
  22. }
  23. return 0;
  24. }

  1. #import <Foundation/Foundation.h>
  2. #import "Company.h"
  3. #import "Eat.h"
  4. //遵循协议
  5. //让对象同时遵循两个协议
  6. @interface Person : NSObject <WriteIOSCode,WriteAndroidCode,Play>
  7. //如果遵循了子协议,那么父协议也遵循了,所以要把父协议的方法也实现掉
  8. @end

  1. #import "Person.h"
  2. @implementation Person
  3. -(void)writeIosCode
  4. {
  5. NSLog(@"人帮公司写IOS代码");
  6. }
  7. -(void)writeAndroidCode
  8. {
  9. NSLog(@"人帮公司写安卓代码");
  10. }
  11. -(void)eatFruit
  12. {
  13. NSLog(@"吃水果");
  14. }
  15. -(void)playLOL
  16. {
  17. NSLog(@"打撸啊撸");
  18. }
  19. @end

  1. #import <Foundation/Foundation.h>
  2. @protocol WriteIOSCode <NSObject>
  3. -(void)writeIosCode;
  4. @end
  5. @protocol WriteAndroidCode <NSObject>
  6. -(void)writeAndroidCode;
  7. @end
  8. @protocol IOSAndAndroidCode <WriteIOSCode,WriteAndroidCode>
  9. @end
  10. @interface Company : NSObject
  11. -(void)addSomeOne:(id <WriteIOSCode>)obj;
  12. //同时遵循两个协议,协议中间用,隔开
  13. -(void)addAnOther:(id <WriteIOSCode,WriteAndroidCode>)obj;
  14. @end

  1. #import "Company.h"
  2. @implementation Company
  3. -(void)addSomeOne:(id <WriteIOSCode>)obj
  4. {
  5. [obj writeIosCode];
  6. }
  7. -(void)addAnOther:(id <WriteIOSCode,WriteAndroidCode>)obj
  8. {
  9. [obj writeIosCode];
  10. [obj writeAndroidCode];
  11. }
  12. @end

  1. #import <Foundation/Foundation.h>
  2. //将协议单独分到文件里面
  3. //NSObject 基协议
  4. //当没有明确的父协议需要遵循的时候,直接遵循基协议
  5. @protocol Eat <NSObject>
  6. @required //必须实现的方法(默认缺省的值)
  7. -(void)eatFruit;
  8. @optional //可选择性实现的方法
  9. //实际在开发的过程中,没办法保证其他人严格按照语法来,所以我们通常都会做检测,看是否实现了协议的方法
  10. @end
  11. //协议的方法自己可以不实现,让遵循的对象来实现
  12. //通常被用在统一接口的地方,所以和实例变量无关,也就是协议里面不能定义实例变量
  13. //继承统一接口:
  14. //都可以实现接口统一, 子类继承父类,其实产生了一个新的类,还可以添加实例变量
  15. //协议统一接口:
  16. //不会产生新的类,也不会添加新的属性
  17. @protocol Play <Eat>
  18. -(void)playLOL;
  19. @end
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注