zoukankan      html  css  js  c++  java
  • Objective-C该Protocol

    Objective-C该Protocol

    Protocol

      简单来说就是一系列方法的列表,当中声明的方法能够被不论什么类实现,这样的模式一般称为(delegation)模式

    在iOS中和OS X中,Apple採用了大量的代理模式来实现MVC中的View(UI控件)和Controller(控制器)


    以下举个样例


    声明一个Button类和Buttonlisterner类

    在Button.h文件中


    #import <Foundation/Foundation.h>
    
    //类声明
    @class Button;
    
    //<>代表实现某个协议,NSObject为做根本的协议
    //ButtonDelegate为协议的名称
    @protocol ButtonDelegate<NSObject>
    
    -(void)onClick:(Button*)but;
    
    @end
    
    
    
    @interface Button : NSObject
    
    //nonatomic不须要多线程管理,delegate是button的监听器
    
    @property(nonatomic,retain) id<ButtonDelegate> delegate;
    
    -(void)Click;
    
    @end
    

    在Button.m文件中


    #import "Button.h"
    
    @implementation Button
    
    //-(void)dealloc{
    //    [super dealloc];
    //}
    
    -(void)Click{
        NSLog(@"Clickbutton被点击了。。。

    "); //假设有onClick:的方法则调用此方法 if ([_delegate respondsToSelector:@selector(onClick:)]) { //而且告诉监听器哪个button被点击了 [_delegate onClick:self]; } } @end


    在Buttonlisterner.h文件中


    #import <Foundation/Foundation.h>
    #import "Button.h"
    
    
    //对协议提前声明。跟@class的作用是一样的
    
    @protocol ButtonDelegate;
    
    @interface Buttonlisterner : NSObject<ButtonDelegate>
    
    
    @end
    

    在Buttonlisterner.m文件中

    #import "Buttonlisterner.h"
    #import "Button.h"
    
    @implementation Buttonlisterner
    
    
    -(void)onClick:(Button *)but
    {
        NSLog(@"onClick...");
    }
    @end

    main.m


    int main(int argc, const char * argv[])
    {
    
        @autoreleasepool {
            Button* button = [[Button alloc]init];
            Buttonlisterner* listenter = [[Buttonlisterner alloc]init];
            button.delegate=listenter;
            [button Click];
            
        
        }
        return 0;
    }
    



  • 相关阅读:
    js语法学习(变量类型,循环,判断语句,函数)
    使用IIS Server Farms搭建应用服务负载均衡
    Vue SSR学习
    Vue-3D-Model:用简单的方式来展示三维模型
    vue中的$EventBus.$emit、$on的应用
    Vue.js系列:生命周期钩子
    浅谈vue学习之组件通信
    vue中的provide/inject讲解
    浅谈vue$router 和 $route的区别
    vue 父子component生命周期
  • 原文地址:https://www.cnblogs.com/bhlsheji/p/4600211.html
Copyright © 2011-2022 走看看