美文网首页
iOS之Protocol,Extention,Category

iOS之Protocol,Extention,Category

作者: 鹏雨燕 | 来源:发表于2019-04-22 00:39 被阅读0次

    -Protocol,协议
    -Extention,扩展,声明
    -Category范畴,策略,分类(很像扩展概念)

    Protocol用法
    你可以新建一个protocol文件,也可以在任意类的头文件中@protocol,
    @option为可选实现,
    @require为必须实现,
    @property为协议属性,遵循了协议就代表拥有协议的属性和方法,类实例可以调用协议的属性(需要@sythesize实现属性的set和get以及内部变量生成)

    #import <Foundation/Foundation.h>
    
    @protocol protocolTest <NSObject>
    @property(nonatomic,readonly)id<protocolTest> proDelegate;
    -(void)protocalTest;
    -(NSString *)protocalName;
    @end
    
    // 新建一个UIView类遵循protocolTest
    @implementation testView
    @synthesize _proDelegate;// 注意!!!!!!这里需要synthesize声明,如果不想这样,可以在testView.h声明一个属性//@property(nonatomic,readonly)id<protocolTest> proDelegate;
    
    proDelegate可以调用
    -(void)protocalTest;
    -(NSString *)protocalName;
    [_proDelegate protocalTest];
    NSString *temp = [_proDelegate protocalName];
    

    然后你可以在其他的类中比如viewController初始化testView,testView *view = [[testView alloc] init]并且设置testView.delegate = self;系统会提示你写代理必须实现的方法,然后你就可以愉快的在viewcontroller中写代理方法了

    Extention的用法
    下面是一个UIView的Extension

    #import <UIKit/UIKit.h>
    
    @interface UIView ()
    
    -(void)extentionTest;
    @end
    

    然后有啥用呢,你可以向任意继承UIView的组件发extentionTest消息,前提你得在这个实例的类中实现这个方法。注意:写在.m文件的扩展是私有的,写在.h内的事公有的。
    还有一种用途是通过extention修改原来类的属性的read/write权限,当然还有其他的用法,有兴趣自行扩展查阅一下。

    Extention的用法
    可以用来对系统原有类进行方法和属性扩展,有很多细节的地方,其中就有runtime的知识点,大家有兴趣翻我上一篇文章iOS属性property及其关键字

    相关文章

      网友评论

          本文标题:iOS之Protocol,Extention,Category

          本文链接:https://www.haomeiwen.com/subject/nvasgqtx.html