zoukankan      html  css  js  c++  java
  • oc Delegate

    把内部的状态通知给外界,我们可以制定一个变量,然后这个变量从外界来指定,之后我们可以通过变量去通知给外界有什么发生了。

    按照上文讲的到新建一个protocol,名字为IPeople

    #import <Foundation/Foundation.h>
    
    //oc里面的协议相当于java里面的接口
    @protocol IPeople <NSObject>
    
    -(int)getAge;
    -(void)setAge:(int)age;
    
    -(NSString*)getName;
    
    @end

    新建一个类文件

    Man.h

    #import <Foundation/Foundation.h>
    #import "IPeople.h"
    #import "ManDelegate.h"
    
    
    @interface Man : NSObject<IPeople> //可以写入多个接口,以逗号(,)隔开
    {
        int _age;
    }
    -(id)init;
    
    -(int)getAge;
    -(void)setAge:(int)age;
    
    -(NSString*)getName;
    
    @property id<ManDelegate> delegate;
    
    
    
    @end

    Man.m

    #import "Man.h"
    
    
    @implementation Man:NSObject
    
    
    - (instancetype)init
    {
        self = [super init];//相当于java里面的this
        if (self) {
            self.delegate=nil;
        }
        return self;
    }
    
    
    -(int)getAge{
        return _age;
    }
    
    -(void)setAge:(int)age{
        if(age!=_age){ //当age值发生变化时代理执行类
            if(self.delegate){
                [self.delegate onAgeChange:age];
            }
        }
        _age=age;
    }
    
    -(NSString*)getName{
        return @"Netcorner";
    }
    
    @end

    新建一个delegate类协议

    #import <Foundation/Foundation.h>
    
    @protocol ManDelegate <NSObject>
    -(void)onAgeChange:(int)age;
    @end

    主程序为:

    #import <UIKit/UIKit.h>
    #import "AppDelegate.h"
    #import "Man.h"
    #import "ManDelegate.h"
    //实现delegate协议的类
    @interface ManListener : NSObject<ManDelegate>
    -(void)onAgeChange:(int)age;
    @end
    
    @implementation ManListener
    
    -(void)onAgeChange:(int)age{
        NSLog(@"Age Changed,Current age is %d",age);
    }
    @end
    
    int main(int argc, char * argv[]) {
    
        Man *m=[[Man alloc]init ];
        [m setDelegate:[[ManListener alloc]init]];
        [m setAge:15];
        
    }
  • 相关阅读:
    Python几种主流框架
    Python测试框架
    Python测试工具开发
    robotFramework——通用的自动化测试框架
    依赖数据库的单元测试——DBUnit
    SpringTest——Spring在Junit上进一步封装,集成的测试模块
    linux---网络配置
    linux-----初学命令和理解
    Liunx----vi编辑器
    虚拟机---网络设置
  • 原文地址:https://www.cnblogs.com/netcorner/p/4742090.html
Copyright © 2011-2022 走看看