• protocol(协议)


     
    • 可以用来声明一大堆方法(不能声明成员变量)
    • 只要某个类遵守了这个协议,就相当于拥有这个协议中的所有方法声明
    • 只要父类遵守了某个协议,就相当于子类也遵守了
     
    //定义一个名叫MyProtocol的协议
    MyProtocol.h
    @protocol MyProtocol <NSObject>
        @required//要求实现,不识闲会发出警告,如果什么都不写,默认是@required
    -(void) test;
    -(void) test2;
        @optional//不要求实现
    -(void) test3;
    @end
     
    Person.h
    @protocol MyProtocol;//协议的提前声明,类似@class
    @interface Person : NSObject <MyProtocol>
     
    @end
     
    Person.m
    #import  MyProtocol.h;
    @implementation Person 
    -(void) test{
     
    }
    -(void) test2{
     
    }
    @end
     
    • 一个协议可以遵守其他多个协议,多个协议之间用逗号 隔开
    • 一个协议遵守了其他协议,就相当于拥有了其他协议中的方法声明

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

    @end

    1》类遵守协议:
    @interface 类名 : 父类名<协议名称1,协议名称2>
    @end
    2》协议遵守协议:
    @protocol 协议名称 <其他协议名称1,其他协议名称2>
    @end

    1. 基协议

    • NSObject是一个基类,最根本最基本的类,任何其他类最终都要继承它
    • 其实还有一个协议,名字也叫NSObject,它是一个基协议,最根本最基本的协议
    • NSObject协议中声明很多最基本的方法,比如descriptionretainrelease
    • 建议每个新的协议都要遵守NSObject协议
    要求obj3保存的对象必须是遵守MyProtocol这个协议;
    NSObject<MyProtocol> *obj3;
    id<MyProtocol> obj3;
    要求obj4,保存的对象必须遵守MyProtocol3,并且继承了Person
    Person<MyProtocol3> *obj4;
    @property中声明的属性也可用做一个遵守协议的限制
    @property (nonatomic,strong)类名<协议名称> * 属性名;
    @property (nonatomic,strong)id<协议名称>  属性名;
     
     
    协议可定义在单独.h文件中,也可以定义在某个类中
    1》如果这个协议只用在某个类中,应该把协议定义在该类中
    2》如果这个协议用在很多类中,就应该定义在单独文件中
     
    分类可定义在单独.h和.m文件中,也可以定义在原来类中
    1》一般情况下,都是定义在单独文件
    2》定义在原来类中的分类,只要求能看懂语法
     
     
    #import "TicketDelegate.h"
    @interface Person : NSObject
    -(void) buyTicket;
    //拥有一个代理属性,代理的类名随便,必须遵守TicketDeltegate协议
    @property (nonatomic,retain) id<TicketDelegate> delegate;
     
    @end
  • 相关阅读:
    在ASP.NET Core中使用TagHelpers
    ASP.NET Core使用Redis
    ASP.NET Core MVC中视图
    HTTP状态码
    ASP.NET Core中静态文件
    ASP.NET Core中使用依赖注入
    在ASP.NET Core中使用多个环境
    ASP.NET Core读取配置文件
    HTML+CSS解决高度塌陷和垂直重叠
    Element-UI的表格合计行的列添加操作按钮
  • 原文地址:https://www.cnblogs.com/shuizhuqing/p/4458121.html
Copyright © 2020-2023  润新知