• objective-c 快速学习1-意图实现之protocal


    参考快速学习指南

    为了快速掌握oc的基本语法,按照上面文章速度学习oc .大概用了4~5天时间。粗越了解下oc.只是粗越了解。

    目的主要还是实践 这个 “学习理论”。并完善这个学习理论。

    鬼知道以后还要学习多少语言呢?

    1.数字处理:四则运算。

    2.字符串处理:分割和组合。

    3.集合处理:可变和不可变集合。 dictionary(oc没写例子)

    4.对象和继承:人,雇员,老板, 放入集合并多态的表示他们的薪水和税收。

    5.意图和实现的分离(事件):单个函数指针的实现(c风格和block)。一组函数指针的实现(protocal)

    6.io的处理。没写

    7.内存管理

    //
    //  main.m
    //  practice
    //  Created by liangshun on 18/5/30.
    //  Copyright © 2018年 liangshun. All rights reserved.
    
    #import <Foundation/Foundation.h>
    
    //定义协议
    @protocol ButtonProtocol <NSObject>
    -(void) onClick;
    @end
    
    
    //委托者
    @interface MyButton : NSObject
    @property id<ButtonProtocol> ButtonDelegate;
    -(void) Click;
    
    @end
    
    //被委托者
    @implementation MyButton
    
    -(void)Click
    {
        if([self.ButtonDelegate respondsToSelector:@selector(onClick)])
        {
            [self.ButtonDelegate onClick];///调用意图,实际调用了某个实现
            
        }
    }
    @end
    
    
    //1.协议,可集中提供一组接口,让一个实现协议的类来完成。而建立不同的实现类,来达到扩展的意图。
    @interface ButtonDelegate_SubmitButton : NSObject <ButtonProtocol>
    @end
    @implementation ButtonDelegate_SubmitButton
    -(void) onClick
    {
        NSLog(@"first button function");
    }
    @end
    
    
    @interface ButtonDelegate_SubmitButton2 : NSObject <ButtonProtocol>
    @end
    @implementation ButtonDelegate_SubmitButton2
    -(void) onClick
    {
        NSLog(@"second button function");
    }
    @end
    
    
    int main(int argc, const char * argv[]) {
        
        MyButton *submitButton=[MyButton new];
        submitButton.ButtonDelegate=[ButtonDelegate_SubmitButton new];
        [submitButton Click];
        
        //新的协议实现类。添加一个协议类,并传给委托者。委托者可随意扩展不同的实现。
        submitButton.ButtonDelegate=[ButtonDelegate_SubmitButton2 new];
        [submitButton Click];
        
        return 0;
    }
  • 相关阅读:
    spring和mybatis整合配置文件
    点击不同按钮,加载不同的页面(不使用iframe的情况下)
    两个完整的jquery slide多方面滑动效果实例
    autofac无法解析一例
    c# Random太快产生的随机数会重复
    linq和ef关于group by取最大值的两种写法
    JavaScript 汉字与拼音互转终极方案 附JS拼音输入法
    使用USB Key(加密狗)实现身份认证
    让Dreamweaver支持cshtml (MVC Razor环境)
    使用EF扩展EntityFramework.BulkInsert实现批量插入
  • 原文地址:https://www.cnblogs.com/lsfv/p/9127982.html
Copyright © 2020-2023  润新知