zoukankan      html  css  js  c++  java
  • Objective-C( protocol协议)

    protocol 协议

    protocol:用来声明方法

    1.协议的定义

     @protocol 协议名称 <NSObject>

      // 方法声明列表....

     @end

     2.如何遵守协议

     1> 类遵守协议

     @interface 类名 : 父类名 <协议名称1, 协议名称2>

     @end

     2> 协议遵守协议

     @protocol 协议名称 <其他协议名称1, 其他协议名称2>

     @end

     3.协议中方法声明的关键字

     1> @required (默认)

       要求实现,如果没有实现,会发出警告

     2> @optional

       不要求实现,这样不会有警告

     4.定义一个变量的时候,限制这个变量保存的对象遵守某个协议

     类名<协议名称> *变量名;

     id<协议名称> 变量名;

     NSObject<MyProtocol> *obj;

     id<MyProtocol> obj2;

     如果没有遵守对应的协议,编译器会警告

     5.@property中声明的属性也可用做一个遵守协议的限制

     @property (nonatomic, strong) 类名<协议名称> *属性名;

     @property (nonatomic, strong) id<协议名称> 属性名;

     @property (nonatomic, strong) Dog<MyProtocol> *dog;

     @property (nonatomic, strong) id<MyProtocol> dog2;

     6.协议可用定义在单独.h文件中,也可用定义在某个类中

     1> 如果这个协议只用在某个类中,应该把协议定义在该类中

     2> 如果这个协议用在很多类中,就应该定义在单独文件中

     7.分类可用定义在单独.h和.m文件中,也可用定义在原来类中

     1> 一般情况下,都是定义在单独文件

     2> 定义在原来类中的分类,只要求能看懂语法

    #import <Foundation/Foundation.h>
    
    @protocol MyProtocol <NSObject> // 遵守其他协议,就把其他协议名写在间括号< >内
    
     // 默认需要实现 
    - (void)test; // 声明方法
    
     // required 需要实现, 不实现只会发出警告
     // optional 不需要实现
    @required
    - (void)test1;
    - (void)test2;
    
    @optional
    - (void)test3;
    
    @end
    
    /******以上是MyProtocol.h文件*******/ 
    
    #import <Foundation/Foundation.h>
    @protocol MyProtocol; // 可以同时有多个协议 <MtProtocol, MyProtocol2> @interface Person : NSObject <MyProtocol> @property (nonatomic, strong) id<MyProtocol> obj; @end /******以上是Person.h文件*******/ #import <Foundation/Foundation.h> #import "MyProtocol.h" @inplementation Person - (void)test { } - (void)test1 { } - (void)test2 { } @end
    /******
    以上是Person.m文件***********/

    #import <Foundation/Foundation.h>
    #import "MtProtocol.h"
    #import "Person.h"
    int main()
    {

      Person *p = [[Person alloc] init];
      

      return 0;
    }

    基协议:<NSObject>  默认遵守基协议

  • 相关阅读:
    HDU 5640 King's Cake
    HDU 5615 Jam's math problem
    HDU 5610 Baby Ming and Weight lifting
    WHU1604 Play Apple 简单博弈
    HDU 1551 Cable master 二分
    CodeForces659C Tanya and Toys map
    Codeforces 960E 树dp
    gym 101485E 二分匹配
    Codeforces 961E 树状数组,思维
    Codeforces Round #473 (Div. 2) D 数学,贪心 F 线性基,模板
  • 原文地址:https://www.cnblogs.com/1023843587qq/p/4769559.html
Copyright © 2011-2022 走看看