zoukankan      html  css  js  c++  java
  • iOS阶段学习第19天笔记(协议-Protocol)

    iOS学习(OC语言)知识点整理

    一、关于协议(Protocol)的介绍

    1)概念:协议指多个对象之间协商的一个接口对象,协议提供了一些方法用在协议的实现者和代理者
          之间通讯的一种方式

    2)声明一个协议@protocol协议的名字<基协议> 一个协议可以遵守另一个协议:
          基协议(这个协议就拥有了基协议中所有方法的声明)

    3)协议中不能声明成员变量,只能有方法声明。

    4)协议中声明方法,默认是required 表明方法是必须要实现的,否则会有系统警告,但不会报错

    5)协议中@optional表明方法是可选的(可以实现也可以不实现)

    6)使用协议:某个类遵守协议,类名后面<协议名> ;所谓遵守协议就是:类拥有了协议中所有方法的声明,
          必须实现协议中规定的方法;一个类可以遵守多个协议(类拥有所有协议中声明的方法,必须实现所有
          协议中规定的方法)

    7)一个协议可以遵守另一个协议,遵守协议后就拥有了另一个协议所有方法的声明,同时还可以添加自己的方法

    8)一个协议可以遵守多个协议,并拥有所有基协议的方法

    9)协议的声明与使用方法 实例代码:
     
        1、添加一个基于Protocol命名为MyProtocol的.h 文件  声明一些协议方法 例如: 

     1 #import <Foundation/Foundation.h>
     2 @protocol MyProtocol <NSObject>
     3 //协议中不能声明成员变量,只有方法
     4 //{
     5 //    int _a;
     6 //}
     7 //协议中声明方法,默认是required
     8 -(void)test1;
     9 -(void)test2;
    10 //@required表明方法是必须要实现的
    11 @required
    12 -(void)test3;
    13 //@optional表明方法是可选的(可以实现也可以不实现)
    14 @optional
    15 -(void)test4;
    16 @end


      2、定义一个Person类 在.h文件中使用协议MyProtocol  例如: 

    1 #import <Foundation/Foundation.h>
    2 #import "MyProtocol.h"   
    3 @interface Person : NSObject<MyProtocol>
    4 @property(nonatomic,copy)NSString *name;
    5 -(void)print;
    6 @end

      3、在Person类的.m文件中实现协议方法 例如: 

     1    #import "Person.h"
     2     @implementation Person
     3     -(void)print
     4     {
     5      NSLog(@"person:%@",self.name);
     6     }
     7     //实现协议中规定的方法
     8     -(void)test1
     9     {
    10       NSLog(@"test1");
    11     }
    12     -(void)test2
    13     {
    14     
    15     }
    16     -(void)test3
    17     {
    18     
    19     }
    20  
    21     @end

     4、在main文件中执行方法 例如:

     1  Person *p1=[[Person alloc]init];
     2   //判断p1所属的类是否遵守了协议
     3   if([p1 conformsToProtocol:@protocol(MyProtocol)]){
     4   //判断p1所属的类是否实现了方法
     5   if([p1 respondsToSelector:@selector(test1)]){
     6        [p1 test1];
     7       }
     8    }
     9         
    10    NSObject *obj1=[[NSObject alloc]init];
    11    obj1=nil;
    12    NSObject *obj2=@"hello";
    13    obj2=nil;
    14    //对obj3指向的对象做一个限制
    15    NSObject<MyProtocol> *obj3=@"abc";
    16    //obj4可以指向任意类型的对象,但是必须遵守MyProtocol协议
    17    id<MyProtocol> obj4=[[Person alloc]init];
    18    Person<MyProtocol> *obj5=[[Person alloc]init];

      
    10)OC中没有多继承,但可以通过协议实现,可通过使用多个协议来实现类似多继承的方法。

    11)协议主要用来统一规范接口;统一接口的方法:继承和协议

    12)协议与继承的区别
         
        1、继承也可以统一规范接口:子类继承父类所有的方法(可以不用重写,除非父类的方法不适合子类),
             重写后的方法名与父类一样,达到了统一接口的目的;子类中可以增加成员变量
     
        2、协议:一个类遵守协议,类就具有协议中所有的方法,如果多个类都遵守同一个协议,这些类都有协议
             中规范的方法,达到了统一接口的目的;协议中不能有成员变量

  • 相关阅读:
    strlen和sizeof的区别
    gdb调试多进程和多线程命令
    (转)Mybatis insert后返回主键给实体对象(Mysql数据库)
    mybatis中使用where in查询时的注意事项
    MySQL IFNULL()函数用法MySQL
    (转)Mysql 多表查询详解
    HTTP的请求方法OPTIONS
    (转)跨域的另一种解决方案——CORS(Cross-Origin Resource Sharing)跨域资源共享
    (转)HTML5开发中Access-Control-Allow-Origin跨域问题
    java maven项目找不到jconsole-1.8.0.jar和tools-1.8.0.jar包
  • 原文地址:https://www.cnblogs.com/ChinaKingKong/p/4640890.html
Copyright © 2011-2022 走看看