一、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 ;
}

三、代码块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修饰

04OC之分类Category,协议Protocol,Copy,代码块block的更多相关文章

  1. Objective-C-----协议protocol,代码块block,分类category

    概述 ObjC的语法主要基于smalltalk进行设计的,除了提供常规的面向对象特性外,还增加了很多其他特性,本文将重点介绍objective-C中一些常用的语法特性. 当然这些内容虽然和其他高级语言 ...

  2. 从C#到Objective-C,循序渐进学习苹果开发(4)--代码块(block)和错误异常处理的理解

    本随笔系列主要介绍从一个Windows平台从事C#开发到Mac平台苹果开发的一系列感想和体验历程,本系列文章是在起步阶段逐步积累的,希望带给大家更好,更真实的转换历程体验.本文继续上一篇随笔<从 ...

  3. [转]iOS代码块Block

    代码块Block是苹果在iOS4开始引入的对C语言的扩展,用来实现匿名函数的特性,Block是一种特殊的数据类型,其可以正常定义变量.作为参数.作为返回值,特殊地,Block还可以保存一段代码,在需要 ...

  4. 一篇文章看懂iOS代码块Block

    block.png iOS代码块Block 概述 代码块Block是苹果在iOS4开始引入的对C语言的扩展,用来实现匿名函数的特性,Block是一种特殊的数据类型,其可以正常定义变量.作为参数.作为返 ...

  5. iOS学习之代码块(Block)

    代码块(Block) (1)主要作用:将一段代码保存起来,在需要的地方调用即可. (2)全局变量在代码块中的使用: 全局变量可以在代码块中使用,同时也可以被改变,代码片段如下: ;//注意:全局变量 ...

  6. 代码块(block)的使用

    Objective-C语法之代码块(block)的使用 代码块本质上是和其他变量类似.不同的是,代码块存储的数据是一个函数体.使用代码块是,你可以像调用其他标准函数一样,传入参数数,并得到返回值. 脱 ...

  7. 代码块(Block)回调一般阐述

    本章教程主要对代码块回调模式进行讲解,已经分析其他回调的各种优缺点和适合的使用场景. 代码块机制 Block变量类型 Block代码封装及调用 Block变量对普通变量作用域的影响 Block回调接口 ...

  8. iOS代码块block使用

    代码块的本质是和其他的变量类似,不同的是,代码块存储的数据是一个函数体.使用代码块,你可以像调用其他标准函数一样的调用,可以传入参数,并得到返回值.     脱字符是代码块的语法标记.下图表示代码块的 ...

  9. Objective-C 代码块(block)的使用

    代码块本质上是和其他变量类似.不同的是,代码块存储的数据是一个函数体.使用代码块是,你可以像调用其他标准函数一样,传入参数数,并得到返回值. 脱字符(^)是块的语法标记.按照我们熟悉的参数语法规约所定 ...

随机推荐

  1. UVA11021 Tribles[离散概率 DP]

    UVA - 11021 Tribles GRAVITATION, n. “The tendency of all bodies to approach one another with a stren ...

  2. 第二天----列表、元组、字符串、算数运算、字典、while

    列表 列表是最常用的Python数据类型,它可以作为一个方括号内的逗号分隔值出现. 基本操作: 索引切片追加删除长度切片循环包含 创建.查看列表: 列表中的数字不要加引号,列表的索引从0开始: lis ...

  3. codevs 1015 计算器的改良 2000年NOIP全国联赛普及组

     时间限制: 1 s  空间限制: 128000 KB  题目等级 : 白银 Silver 题目描述 Description NCL是一家专门从事计算器改良与升级的实验室,最近该实验室收到了某公司所委 ...

  4. Java通过ODBC链接数据库并遍历结果的一个问题

    上一篇文章谈到怎么连接Oracle数据库,其实通过ODBC也差不多,只是driver要换成JdbcOdbcDriver.配置文件如下: driver=sun.jdbc.odbc.JdbcOdbcDri ...

  5. [网络安全] [视频分享]KaLi Linux基础培训2016 最新的哦【福吧资源网】

    最新的教程同时针对kali linux2016最新版本的多个问题解决办法还有一些实例利用. 下载地址:http://www.fu83.cn/thread-310-1-1.html

  6. 【JSON】JavaScript删除json元素

    1.json中的两种结构:对象{}和数组[] 2.直接delete json对象[元素名称].

  7. 软件工程(FZU2015)赛季得分榜,第9回合

    目录 第一回合 第二回合 第三回合 第四回合 第五回合 第6回合 第7回合 第8回合 第9回合 第10回合 第11回合 积分规则 积分制: 作业为10分制,练习为3分制:alpha30分: 团队项目分 ...

  8. JQuery中Ajax的操作

    JQuery   Ajax异步操作的方式: $.ajax,$.post, $.get, $.getJSON. 一, $.ajax,这个是JQuery对ajax封装的最基础步,通过使用这个函数可以完成异 ...

  9. (转)C#为什么要使用Invoke,它和BeginInvoke有什么区别

    在Invoke或者BeginInvoke的使用中无一例外地使用了委托Delegate. 一.为什么Control类提供了Invoke和BeginInvoke机制? 关于这个问题的最主要的原因已经是do ...

  10. 【UOJ #14】【UER #1】DZY Loves Graph

    http://uoj.ac/problem/14 题解很好的~ 不带路径压缩的并查集能保留树的原本形态. 按秩合并并查集可以不用路径压缩,但是因为此题要删除,如果把深度当为秩的话不好更新秩的值,所以把 ...