一、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. Java程序设计之扑克牌

    这段代码的主要实现功能扑克牌的洗牌和发牌功能,一副牌,红桃,黑桃,梅花,方片,A~K,不含大小王. 构造一个class. 首先是声明花色: private String[] sign={"方 ...

  2. hibernate 数据处理

    1.Hibernate的配置文件 Hibernate.cfg.xml Dept.hbm.xml 2.CRUD的方法名称和参数类型 Save(Object obj) Delete(Object obj) ...

  3. Spring知识点提炼

    原文出处: 朱小厮 1. Spring框架的作用 轻量:Spring是轻量级的,基本的版本大小为2MB 控制反转:Spring通过控制反转实现了松散耦合,对象们给出它们的依赖,而不是创建或查找依赖的对 ...

  4. 文件夹右键添加“DOS”命令

    导入注册表 Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\Folder\shell\RunCMD] @="进入命令行&quo ...

  5. 屏蔽防止被别的网站嵌入框架代码(防止被人frame)

    <SCRIPT LANGUAGE=javascript> if (top.location != self.location)top.location=self.location; < ...

  6. 开源任务管理平台TaskManager介绍

    很早之前准备写Quartz系列文章,现在终于能够实现了.从本篇开始将带你实现一款自己的任务管理平台.在工作中你曾经需要应用执行一个任务吗?这个任务每天或每周星期二晚上11:30,或许仅仅每个月的最后一 ...

  7. C#基础系列——委托和设计模式(二)

    前言:前篇 C#基础系列——委托实现简单设计模式 简单介绍了下委托的定义及简单用法.这篇打算从设计模式的角度去解析下委托的使用.我们知道使用委托可以实现对象行为(方法)的动态绑定,从而提高设计的灵活性 ...

  8. 微信小程序之知乎日报

    上一次的<微信小程序之小豆瓣图书>制作了一个图书的查询功能,只是简单地应用到了网络请求,其他大多数小程序应有的知识.而本次的示例是知乎日报,功能点比较多,页面也比上次复杂了许多.在我编写这 ...

  9. C 语言学习 第二次作业总结

    本次作业内容,主要有以下几点: 新建 coding 帐号,且使用 coding 上传本次作业的代码 Printf及条件判断语句的使用 作业总结 作业总结: 同学们开始渐入佳境,能够较为流畅的写出合理的 ...

  10. VS使用技巧——统计代码行数

    通常为了统计一个文件或者一整个解决管理方案中代码行量,可能会选择定位来获取行量,但是当文件尤其大时,传统方式就不行了,这里推荐使用正则表达式搜索统计,可以快速获取目标文档的总代码量. Tips: ct ...