zoukankan      html  css  js  c++  java
  • 04OC之分类Category,协议Protocol,Copy,代码块block

    一、Protocol协议

    我们都知道,在C#有个规范称之为接口,就是规范一系列的行为,事物。在C#中是使用Interface关键字来声明一个接口的,但是在OC中interface是用来声明类,所以用了另外一个关键字protocol来表示。

    下面我们定义一个动物的协议AnimalDelegate,人Person需要实现这个协议。

    Person.h文件

    Person.m文件

    二、Category分类

      何为分类呢?一听这个概念可能很模糊。从C#的角度来说,相当于扩展方法(可以在不修改原本类的情况下使用自定义的方法)。利用分类我们就可以为已有的类添加一些新的方法,特别是系统或者框架的类。在C#字符串中有个Trim()的方法去除左右的空格,用起来很方便,但是在OC中没有,我们一起来扩充一下。

    .h文件

    #import <Foundation/Foundation.h>
    @interface NSString(Extend) -(NSString *)stringByTrim; @end

    .m文件

    #import <Foundation/Foundation.h>
    @interface NSString(Extend) -(NSString *)stringByTrim;
    @end

    main.m

    #import <Foundation/Foundation.h>
    #import "NSString_Trim.h"

    int main(int argc, const char * argv[]) { NSString *name=@" Kevin ";
      //输出 NSLog(
    @"I'm %@",name); name=[name stringByTrim]; NSLog(@"I'm %@",name); return 0; }

    三、代码块Block

    在c#异步编程中我们经常需要进行函数回调,由于函数回调是异步执行了,如果按正常书写代码无法预知上一个方法什么时候结束,这个时候就要用到匿名委托或者是Lambada表达式将上一个操作为一个参数进行传递,其实在OC中也有类似的方法,称之为代码块。Block就是代码块,一个函数体,一个匿名函数,它是OC对于闭包的实现,在块状中我们可以持有或者引用局部变量,lambada表达式也可以,同时利用Block我们可以将一个操作作为一个参数进行传递,C语言的函数指针也是如此。下面我们使用Block进行点击监听:

    KCButton.h:

    KCButton.m:

    main.m

    执行结果如下:

    上面的代码使用Block实现了按钮的点击事件,总结如下:

    1.Block的类型定义:返回值类型(^变量名)(参数列表)

    2.Block的typedef定义:返回值类型(^类型名称)(参数列表)

    typedef void(^KCButtonClick)(KCButton *)

    3.Block的实现:^(参数列表){操主体}

    button.onclick=^(KCButton *btn){
    NSLog(@"Invoke Onclikc the Method.The button is :%@",btn);
    };

    4.Block中可以读取块外部定义的变量,但是不可以修改,如果要修改这个变量必须声明_block修饰

  • 相关阅读:
    phpcms无法读取index.html的解决步骤
    PHPwind高级伪静态规则及方法
    WordPress 添加Meta Box的方法步骤
    WordPress实现登录或退出后直接跳转到首页的方法
    怎么在php里面利用str_replace防注入
    php strrpos()与strripos()函数不同之处在哪里呢
    smarty中增加类似foreach的功能自动加载数据方法
    php连接Access数据库错误及解决方法
    如何利用php array_multisort函数 对数据库排序
    php之XML转数组函数的方法
  • 原文地址:https://www.cnblogs.com/duyao/p/4925388.html
Copyright © 2011-2022 走看看