李洪强iOS开发之OC语言BLOCK和协议

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头文件中,但也可以定义在任何地方。当这个协议只有这个类使用遵守时,一般把协议写在这个类里边,当这个协议需要多个类去实现时,就写在外边单独的文件中。

时间: 07-08

李洪强iOS开发之OC语言BLOCK和协议的相关文章

李洪强iOS开发之OC语言前期准备

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

李洪强iOS开发之OC语言基础知识

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

李洪强iOS开发之OC语言description方法和sel

OC语言description方法和sel 一.description方法 Description方法包括类方法和对象方法.(NSObject类所包含) (一)基本知识 -description(对象方法) 使用NSLog和@%输出某个对象时,会调用对象的description方法,并拿到返回值进行输出. +description(类方法) 使用NSLog和@%输出某个对象时,会调用类对象的description方法,并拿到返回值进行输出,把整个对象一次性打印出来,打印对象使用%@. 使用@%打

李洪强iOS开发之OC[016]C语言关键字

// //  main.m //  04 - C语言关键字 // //  Created by vic fan on 16/7/12. //  Copyright © 2016年 李洪强. All rights reserved. // C语言关键字 A -  数据相关 1) 基本数据类型(5个) void    空   没有的意思 char    字符 占 1个字节(char的本质也是数字) int     整数  4个字节 float   浮点数  (小数点)保留7位有效数字 double 

李洪强iOS开发之OC[018]对象和方法之间的关系

// //  main.m //  18 - 对象和方法之间的关系 // //  Created by vic fan on 16/7/14. //  Copyright © 2016年 李洪强. All rights reserved. // /** * OC有参有返回值的方法 有参有返回值方法的声明 - (int)sum:(int)x andY:(int)y; - (int)sum:(int)x andY:(int)y{ return x+y; 关系: 1 对象作为方法的参数; 显示人的信息

李洪强iOS开发之OC[017]函数和方法的区别

// //  main.m //  15 - 函数和对象的方法的区别 // //  Created by vic fan on 16/7/12. //  Copyright © 2016年 李洪强. All rights reserved. // 函数和对象方法的区别 对象方法: - (void)run; #import <Foundation/Foundation.h> @interface Person : NSObject{ @public //定义实例变量 NSString *_nam

李洪强iOS开发之OC[017]C语言标示符

/** *    标示符 2016年 7月 14日 01 低级语言和高级语言的最大不同: 低级语言用的是机器指令 高级语言就是写一些人可以看得懂的代码-汇编语言 标示符 就是名字 命名规则: 1) 只能有字母,数字,下划线,和美元符($)组成 (编译器支持的字符集) 2) 不能以数字开头 3)不能与关键字重名 4) 严格区分大小写 在开发中有给函数命名的机会,一般需要按照函数的功能, 来取一个有意义的名字 例如输入数字input a number 来作为函数名,写法有两种 input_a_num

李洪强iOS开发之C语言程序编译过程

汇编语言 指令用特定的名字来标记,这就是汇编语言 人比较容易看懂汇编语言 汇编直接和程序一一对应的 有汇编器把程序翻译成机器码 把高级语言编译成计算机识别的语言 程序编译过程 命令行 UNIX 系统中自带了C语言的编译器,编译器的名字叫CC CC 的含义是C Compler Linux系统是一个开源的,它自带的C编译器叫GCC GCC 不仅可以编译C 还可以编译Python 和OC MAC OS 的编译器是苹果公司自己研发的 Clang 在用CC或者GCC 的命令的时候,本质是调用了clang

李洪强iOS开发之C语言重难点

  C语言学习的重难点 写程序的三个境界: 照抄的境界,翻译的境界,创新的境界 1  伪代码: 描述C语言的编程范式 范式: 规范的一种表示 对于C的范式学会的话,C, C++ Java 都会了 2 运算符的自曾与自减 3 进制转换与数据在内存中的表示 4 循环嵌套 5 多维数组 6 函数递归 7 指针-是一把双刃剑 8 内存管理 9 待条件的宏