OC语言BLOCK和协议

一、BOLCK

(一)简介

BLOCK是什么?苹果推荐的类型,效率高,在运行中保存代码。用来封装和保存代码,有点像函数,BLOCK可以在任何时候执行。

BOLCK和函数的相似性:(1)可以保存代码(2)有返回值(3)有形参(4)调用方式一样。

标识符 ^


(二)基本使用

(1)定义BLOCK变量

Int (^SumBlock)(int,int);//有参数,返回值类型为int

Void (^MyBlock)();//无参数,返回值类型为空

(2)利用block封装代码


(3)Block访问外部变量

1)Block内部可以访问外部变量;

2)默认情况下,Block内部不能修改外部的局部变量

3)给局部变量加上__block关键字,则这个局部变量可以在block内部进行修改。

(4)利用typedef定义block类型(和指向函数的指针很像)

Typedef int(^MyBlock)(int ,int);

以后就可以利用这种类型来定义block变量了。

MyBlock a,b;

a=^(int a,int b){return a-b;};

MyBlock b2=^(int n1,int n2){return n1*n2;};

二、Protocol(协议)

(一)简介

1.Protocol:就一个用途,用来声明一大堆的方法(不能声明成员变量),不能写实现。

2.只要某个类遵守了这个协议,就拥有了这个协议中的所有方法声明。

3.只要父类遵守了某个协议,那么子类也遵守。

4.Protocol声明的方法可以让任何类去实现,protocol就是协议。

5.OC不能继承多个类(单继承)但是能够遵守多个协议。继承(:),遵守协议(< >)

6.基协议:<NSObject>是基协议,是最根本最基本的协议,其中声明了很多最基本的方法。

7.协议可以遵守协议,一个协议遵守了另一个协议,就可以拥有另一份协议中的方法声明。

(二)基本使用



创建一个协议


遵守协议


完成协议中声明的方法的实现


测试程序


1.协议的定义

@protocol 协议名称 <NSObject>

//方法声明列表

@end;

2.如何遵守协议

(1)类遵守协议

@protocol 类名:父类名 <协议名称1,协议名称2>

@end

(2)协议遵守协议

@protocol 协议名称 <其他协议名称>

@end;

3.协议方法声明中的关键字

(1)required (默认)要求实现,若没有实现则警告但不报错

(2)Optional 不要求实现

4.定义变量时遵守协议的限制

类名<协议名称> *变量名 NSObject<.Myprotocol> *obj;

Id <协议名称> 变量名 id <.Myprotocol> obj1;

5.Property中声明的属性也可以做遵守协议的限制

@property (nonatomic ,strong ) 类名<协议名称> *属性名;

@property (nonatomic ,strong ) id<协议名称> 属性名;

6.补充知识:协议本身写在.h头文件中,但也可以定义在任何地方。当这个协议只有这个类使用遵守时,一般把协议写在这个类里边,当这个协议需要多个类去实现时,就写在外边单独的文件中。

时间: 2024-09-15 09:46:10

OC语言BLOCK和协议的相关文章

让你提前认识软件开发(19):C语言中的协议及单元测试示例

第1部分 重新认识C语言 C语言中的协议及单元测试示例   [文章摘要]         在实际的软件开发项目中,经常要实现多个模块之间的通信,这就需要大家约定好相互之间的通信协议,各自按照协议来收发和解析消息.        本文以实际的程序代码为例,详细介绍了如何用C语言来实现通信协议,并基于对协议字段的判断,说明了程序单元测试的过程,为相关的开发工作提供了有益的参考. [关键词]        软件开发  协议  单元测试  C语言  字段   一.软件模块之间的协议         什么

OC语言基础知识

一.面向对象 OC语言是面向对象的,c语言是面向过程的,面向对象和面向过程只是解决问题的两种思考方式,面向过程关注的是解决问题涉及的步骤,面向对象关注的是设计能够实现解决问题所需功能的类. 术语:OO面向对象.OOP面向对象编程 二.类 (一)关于类 类的设计只关注三个东西:类名.属性和方法 注意:一般名词都是类,拥有相同属性和行为的对象都可以抽象为一个类,类名是标识符的一种,需要符合规范,通常类名的第一个字母大写,且不能有下划线,如果有多个单词则使用驼峰标识.在对方法进行类的划分中,一般采取的

OC语言构造方法

OC语言构造方法 一.构造方法 (一)构造方法的调用 完整的创建一个可用的对象:Person *p=[Person new]; New方法的内部会分别调用两个方法来完成2件事情,1)使用alloc方法来分配存储空间(返回分配的对象):2)使用init方法来对对象进行初始化. 可以把new方法拆开如下: 1.调用类方法+alloc分配存储空间,返回未经初始化的对象 Person *p1=[person alloc]; 2.调用对象方法-init进行初始化,返回对象本身 Person *p2=[p1

OC语言类的本质和分类

OC语言类的深入和分类 一.分类 (一)分类的基本知识 概念:Category 分类是OC特有的语言,依赖于类. 分类的作用:在不改变原来的类内容的基础上,为类增加一些方法. 添加一个分类: 文件结构图: 在分类中添加一个方法 Study方法的实现 测试程序: (二)分类的使用注意 (1)分类只能增加方法(包括类方法和对象方法),不能增加成员变量 (2)在分类方法的实现中可以访问原来类中的成员变量: (3)分类中可以重新实现原来类中的方法,但是会覆盖掉原来的方法,导致原来的方法无法再使用(警告)

OC语言@property @synthesize和id

OC语言@property @synthesize和id 一.@property @synthesize关键字 注意:这两个关键字是编译器特性,让xcode可以自动生成getter和setter的声明和实现. (一)@property 关键字 @property 关键字可以自动生成某个成员变量的setter和getter方法的声明 @property int age; 编译时遇到这一行,则自动扩展成下面两句: - (void)setAge:(int)age; - (int)age; (二)@sy

OC语言前期准备

OC语言前期准备 一.OC简介 Oc语言在c语言的基础上,增加了一层最小的面向对象语法,完全兼容C语言,在OC代码中,可以混用c,甚至是c++代码. 可以使用OC开发mac osx平台和ios平台的应用程序. 拓展名:c语言-.c OC语言.-m 兼容C++.-mm 注:其实c语言和oc甚至任何一门语言都只是我们为了实现一些功能,达到一些效果而采用的工具,抛开语法的差别外,我想最重要的应该是在解决问题的时候考虑的角度和方法不一样而已,然而这也构成了学习一门语言的重要性. 二.语法预览 (一)关键

iOS - OC 语言新特性

前言 相对于 Java,OC 语言是一门古老的语言了,而它又是一门不断发展完善的语言.一些新的编译特性,为 OC 语言带来了许多新的活力.在 Xcode7 中,iOS9 的 SDK 已经全面兼容了 Objective-C 的一些新特 性和新功能.这些功能都只作用于编译期,对程序的运行并没有影响,因此,它可以很好的向下进行兼容,无缝的衔接低版本的 iOS 系统,如果可以将这些新特性都应用于开发,开发效率和代码质量,相比之前会有一个很大的提升. 1.可选类型检测 在 swift 语言中,通过 ! 和

OC语言大总结(下)

根据OC学习的知识点,总结了一下,希望能帮到大家! 作者:韩俊强   未经允许,请勿转载! 关注博主:http://weibo.com/hanjunqiang 上接:http://blog.sina.com.cn/s/blog_814ecfa90102vuu1.html 第五节 数组.字典.集合 字典.集合:http://blog.sina.com.cn/s/blog_814ecfa90102vub9.html 数组:http://blog.sina.com.cn/s/blog_814ecfa9

OC语言大总结(上)

根据OC学习的知识点,总结了一下,希望能帮到大家! 作者:韩俊强  未经允许,请勿转载! 关注博主:http://weibo.com/hanjunqiang 第一节类于对象   类与对象http://blog.sina.com.cn/s/blog_814ecfa90102vtum.html 知识点 注意事项 面向对象编程 OOP(Object Oriented Programming) 面向对象语言 C++,Java,C#,OC,Swift 概念 类,对象,封装,继承,多态... 面向过程编程