OBJ-C block + protocol 学习笔记
来源:互联网 发布:软件测试经典案例 编辑:程序博客网 时间:2024/06/05 10:36
================================================================
block + protocol
===============================================================
block类型是一个C级别的语法和运行机制。
------------------------------------------------
block变量的定义格式:
int multiplier = 7;
int(^myBlock)(int) = ^(int num){return num * multiplier;};
^符号将myBlock声明为一个块对象;
myBlock是块对象,返回整型值;
它有一个参数,参数的类型也是整型值;
参数的名称是num;
-----------------------------------------------
无参无返回值:void(^变量名)() = ^(){代码块语句;};
有参无返回值:void(^变量名)(参数类型及个数) = ^(形参列表){代码块语句;};
--------------------------------------------------
block的typedef
利用typedef定义block类型(和指向函数的指针很像)
例如:
typedef int(^Block)(int) 是给返回值是int类型并且有一个int类型参数的block语句块起别名,别名为Block。
------------------------------------------------------------
block访问外部变量
当定义block的时候,block会把外部变量以const的方式复制一份,然后存放到block所在的内存中。
注意:block中访问的外部变量,其地址与外部变量的地址不同;
如果在block内部定义的变量,是存到栈区的。
给block的外部变量前面加上__block修饰,则这个变量可以在block内部修改。而且,在修改之后,在block里被修改的变量,到block外部访问使用时,其值和地址都变成了block修改之后的。
-----------------------------------------------------------------
block分为3种:全局block,栈block,堆block;
---------------------------------------------------
block作为函数的返回值
步骤:
1.使用typedef给block类型起个别名;
2.用新定义的类型作为函数的返回值;
3.定义block变量接收函数返回的结果;
4.执行block;
---------------------------------------------------
block使用技巧及注意
助记符:inlineblock可以调出block的格式;
==================================================================================
protocol概念及基本使用
protocol基本概念
1.定义协议:
@protocol 协议名称<NSObject>
//方法声明列表;
@end
注意:协议默认采纳NSObject的协议
2.采纳协议:
(1)类遵守协议 @interface 类名:父类名<协议名称1,协议名称2>
@end
(2)协议遵守协议
-------------------------------------------------------------------
protocol的使用注意
1.Protocol:就一个用途,用来声明一大堆的方法(不能声明成员变量),不能写实现;
2.只要某个类遵守了这个协议,就拥有了这个协议中的所有方法声明;
3.只要父类遵守了某个协议,那么子类也遵守;
4.protocol声明的方法可以让任何类去实现;
5.OC不能继承多个类(单继承)但是能遵守多个协议;
6.基协议:<NSObject>是基协议,是最根本最基本的协议,其中声明了很多最基本的方法;
7.协议可以遵守协议,一个协议遵守了另一个协议,就可以拥有另一份协议中的方法声明;
------------------------------------------------------------------
@required和@optional
这两个关键字的作用:
@required是必须要实现的方法,默认值。如果不实现,编译器会发出警告;
@optional是可选择实现的方法;
------------------------------------------------------------------
protocol类型限制:
1.给id类型增加限制
例如:
id<myProtocol> obj = mm; 这句话的意思是:如果等号右边的对象想赋值给obj,那么这个对象必须遵守myProtocol这个协议,即mm所在的类要遵守myProtocol这个协议。
------------------------------------------------------------------
id和instancetype的区别
1.instancetype只能作为函数或者方法的返回值;
2.id能作为方法或者函数的返回值、参数类型、也能用来定义变量;
3.instancetype能精确地限制返回值的具体类型;
-----------------------------------------------------------------
protocol代理设计模式引入
代理模式概念:传入的对象,代替当前类完成了某个功能,称为代理模式;
---------------------------------------------
协议的循环引入问题
即不用#import,用@protocol。和@class的用法差不多。
block + protocol
===============================================================
block类型是一个C级别的语法和运行机制。
------------------------------------------------
block变量的定义格式:
int multiplier = 7;
int(^myBlock)(int) = ^(int num){return num * multiplier;};
^符号将myBlock声明为一个块对象;
myBlock是块对象,返回整型值;
它有一个参数,参数的类型也是整型值;
参数的名称是num;
-----------------------------------------------
无参无返回值:void(^变量名)() = ^(){代码块语句;};
有参无返回值:void(^变量名)(参数类型及个数) = ^(形参列表){代码块语句;};
--------------------------------------------------
block的typedef
利用typedef定义block类型(和指向函数的指针很像)
例如:
typedef int(^Block)(int) 是给返回值是int类型并且有一个int类型参数的block语句块起别名,别名为Block。
------------------------------------------------------------
block访问外部变量
当定义block的时候,block会把外部变量以const的方式复制一份,然后存放到block所在的内存中。
注意:block中访问的外部变量,其地址与外部变量的地址不同;
如果在block内部定义的变量,是存到栈区的。
给block的外部变量前面加上__block修饰,则这个变量可以在block内部修改。而且,在修改之后,在block里被修改的变量,到block外部访问使用时,其值和地址都变成了block修改之后的。
-----------------------------------------------------------------
block分为3种:全局block,栈block,堆block;
---------------------------------------------------
block作为函数的返回值
步骤:
1.使用typedef给block类型起个别名;
2.用新定义的类型作为函数的返回值;
3.定义block变量接收函数返回的结果;
4.执行block;
---------------------------------------------------
block使用技巧及注意
助记符:inlineblock可以调出block的格式;
==================================================================================
protocol概念及基本使用
protocol基本概念
1.定义协议:
@protocol 协议名称<NSObject>
//方法声明列表;
@end
注意:协议默认采纳NSObject的协议
2.采纳协议:
(1)类遵守协议 @interface 类名:父类名<协议名称1,协议名称2>
@end
(2)协议遵守协议
-------------------------------------------------------------------
protocol的使用注意
1.Protocol:就一个用途,用来声明一大堆的方法(不能声明成员变量),不能写实现;
2.只要某个类遵守了这个协议,就拥有了这个协议中的所有方法声明;
3.只要父类遵守了某个协议,那么子类也遵守;
4.protocol声明的方法可以让任何类去实现;
5.OC不能继承多个类(单继承)但是能遵守多个协议;
6.基协议:<NSObject>是基协议,是最根本最基本的协议,其中声明了很多最基本的方法;
7.协议可以遵守协议,一个协议遵守了另一个协议,就可以拥有另一份协议中的方法声明;
------------------------------------------------------------------
@required和@optional
这两个关键字的作用:
@required是必须要实现的方法,默认值。如果不实现,编译器会发出警告;
@optional是可选择实现的方法;
------------------------------------------------------------------
protocol类型限制:
1.给id类型增加限制
例如:
id<myProtocol> obj = mm; 这句话的意思是:如果等号右边的对象想赋值给obj,那么这个对象必须遵守myProtocol这个协议,即mm所在的类要遵守myProtocol这个协议。
------------------------------------------------------------------
id和instancetype的区别
1.instancetype只能作为函数或者方法的返回值;
2.id能作为方法或者函数的返回值、参数类型、也能用来定义变量;
3.instancetype能精确地限制返回值的具体类型;
-----------------------------------------------------------------
protocol代理设计模式引入
代理模式概念:传入的对象,代替当前类完成了某个功能,称为代理模式;
---------------------------------------------
协议的循环引入问题
即不用#import,用@protocol。和@class的用法差不多。
0 0
- OBJ-C block + protocol 学习笔记
- objective-C学习笔记(六):OC之block和protocol
- obj-c学习笔记
- OC学习笔记十---Block与@protocol
- Objective-C - protocol学习笔记
- 黑马程序员—Objective-C学习—block和protocol
- 黑马程序员- IOS学习笔记-OC ARC、BLOCK、protocol
- OC学习笔记九 Protocol、Block、成员变量-补充
- OBJ-C简介部分学习笔记
- OBJ-C类和对象学习笔记
- OBJ-C类方法概述学习笔记
- OBJ-C组合模式学习笔记
- OBJ-C组合模式学习笔记
- OBJ-C构造方法学习笔记
- OBJ-C NSString + NSRange + NSMutableString 学习笔记
- OBJ-C NSArray + NSDictionary学习笔记
- 【Objective-C学习笔记】block
- Object-C-block和protocol
- 算法基础 - 单源点最短路径SPFA
- 图解红黑树之插入与删除
- OBJ-C ARC概念及原理+分类 学习笔记
- 魔兽世界私服Trinity,从源码开始
- 扣丁音乐(四)——本地音乐加载
- OBJ-C block + protocol 学习笔记
- CC2538内存分配问题
- 软件开发——软技能(背景)
- OBJ-C NSString + NSRange + NSMutableString 学习笔记
- HDU1262 寻找素数对
- 底部菜单栏之Fragment+FragmentHost实现
- Codeforces 674C Levels and Regions
- 路径中 斜杠/和反斜杠\ 的区别
- 地图与定位