黑马程序员---OC基础---Block、分类Category、协议protocol
2015-08-06 22:27
555 查看
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
1.用途:
1)封装一段代码,可在任意时刻执行
2)可以作为函数的参数或函数的返回值
3)苹果官方建议使用Block(用于动画、多线程、集合遍历、网络请求回调等)
2.格式:
返回值类型 (^block变量名)(形参列表) = ^(形参列表){ 代码段 };例:
1.作用
1)在不修改原来类的基础上,为该类扩充一些新方法
2)一个庞大的类可以分模块开发,储存在不同文件中
3)庞大的类可以由多人编写,有利于团队合作
2.目的
1)对现有类进行扩展
2)作为子类的替代手段,直接向类增加方法
3)对类中方法归类,便于更新和维护
3.步骤
——创建新的分类文件命名规则:类名+分类名称
1)声明
——格式:@interface 待扩展类(分类名称) @end
这里在Person类的base分类中加入了run方法
——实现:@implementation待扩展类(分类名称) @end
4.注意
1)分类只能增加方法,不能增加成员变量
2)分类中可访问原来类的成员变量
3)若分类中与原来类有同名方法,优先使用分类方法
4)若多个分类中都有同名方法优先执行最后编译的分类方法
5.Gategory非正式协议
非正式协议即类别,凡是NSObject或者其子类的类别,都是非正式协议
6.类的延展(Extension)
——概念:也叫延展类别、扩展,是特殊的类别
——作用:可以为类添加额外的实例变量、方法或合成属性
Person()实现
1.使用流程
新建Source文件选择Object-C中的Protocol
1)定义Protocol
在类的.m文件中实现协议中的方法
2.使用注意
1)Protocol中可以声明多个方法,不能声明成员变量
2)类拥有协议的所有方法声明
3)子类也遵守父类的协议
4)Protocol声明的方法可以让任何类去实现
5)OC中不能继承多个类,但可以遵守多个协议
6)基协议<NSObject>是最根本的协议,它声明了很多最基本的方法
7)一个协议在声明的时候也可以遵守另外的协议
3.@required和@optional(主要用于程序员交流)
——@required表示该方法必须实现(默认)
——@optional表示后面的方法可以选择实现
传入的对象代替当前类完成某项功能(代替实现某些方法),称为代理模式
1)目的
——解耦(主类不在依赖特定某个类型,而是依赖代理,而很多类型都可以作为代理)
——增加程序的灵活性、可扩展性
——通知、事件监听……
2)思路&步骤
——定义协议:声明代理需要实现的方法
——创建一个delegate(代理)类,遵守上面协议
——在需要代理的类中,定义一个遵守代理协议的id类型的成员变量
——在需要代理类方法中调用代理类方法
——在main.m或其他需要代理类的文件中,为代理类成员变量赋值
补充:.h文件中@protocol是告诉编译器这是个协议,在.m文件中导入协议文件
一、Block
Block是iOS中一种特殊的数据类型,不同于int、float等数据类型,Block变量是用来保存一段代码的,因此代码从此也可以作为参数传递,功能类似于函数和方法1.用途:
1)封装一段代码,可在任意时刻执行
2)可以作为函数的参数或函数的返回值
3)苹果官方建议使用Block(用于动画、多线程、集合遍历、网络请求回调等)
2.格式:
返回值类型 (^block变量名)(形参列表) = ^(形参列表){ 代码段 };例:
int (^blockSum)(int,int) = ^(int a,int b){ int sum = 0; sum = a+b; return sum; }这里用Block型封装了一段求两个整形数的和的代码段,调用如下代码:
int sum = blockSum(3,5)3.利用typedef给Blocklei类型取别名,例:
typedef int (^MyBlock)(int,int); MyBlock sum; //sum实际形式如下,是一个有两个形参,返回值为int型的代码块 int (^blockSum)(int,int);4.使用技巧:利用助记符(inlineBlock)进行格式提示,可以帮助记忆
二、分类Gategory
Gategory翻译过来可以叫分类、类别或者类目,是OC中特有的语法,类似于C#中的“扩展方法”和“partial”关键字1.作用
1)在不修改原来类的基础上,为该类扩充一些新方法
2)一个庞大的类可以分模块开发,储存在不同文件中
3)庞大的类可以由多人编写,有利于团队合作
2.目的
1)对现有类进行扩展
2)作为子类的替代手段,直接向类增加方法
3)对类中方法归类,便于更新和维护
3.步骤
——创建新的分类文件命名规则:类名+分类名称
1)声明
——格式:@interface 待扩展类(分类名称) @end
@interface Person(base) -(void)run; @end
这里在Person类的base分类中加入了run方法
——实现:@implementation待扩展类(分类名称) @end
@interface Person(base) -(void)run{ NSLog(@"人会跑"); } @end注意在声明中引入"Student.h",实现中引入"Student+Base.h"
4.注意
1)分类只能增加方法,不能增加成员变量
2)分类中可访问原来类的成员变量
3)若分类中与原来类有同名方法,优先使用分类方法
4)若多个分类中都有同名方法优先执行最后编译的分类方法
5.Gategory非正式协议
非正式协议即类别,凡是NSObject或者其子类的类别,都是非正式协议
6.类的延展(Extension)
——概念:也叫延展类别、扩展,是特殊的类别
——作用:可以为类添加额外的实例变量、方法或合成属性
@interface Person(){ int age; } -(void)run; @end——注意:延展类通常放在原类.m文件中,方法的实现只能在原类的.m文件,不能新建.m文件在@implementation
Person()实现
三、协议Protocol
Protocol可以声明一些必须实现的方法和选择实现的方法1.使用流程
新建Source文件选择Object-C中的Protocol
1)定义Protocol
@protocol MyProtocol<NSObject> //定义一个协议名为MyProtocol的协议,且遵守NSObject协议 -(void)run; //声明一个遵守本协议后必须实现的方法 @end2)采纳协议
@interface Person:NSObject<MyProtocol> //Person类遵守此协议(可以遵守多个协议) @end3)实现协议
在类的.m文件中实现协议中的方法
2.使用注意
1)Protocol中可以声明多个方法,不能声明成员变量
2)类拥有协议的所有方法声明
3)子类也遵守父类的协议
4)Protocol声明的方法可以让任何类去实现
5)OC中不能继承多个类,但可以遵守多个协议
6)基协议<NSObject>是最根本的协议,它声明了很多最基本的方法
7)一个协议在声明的时候也可以遵守另外的协议
3.@required和@optional(主要用于程序员交流)
——@required表示该方法必须实现(默认)
——@optional表示后面的方法可以选择实现
@protocol baseProtocol<NSobject> @required -(void)eat; //本方法必须实现 @optional -(void)run; //本方法选择实现 @end4.Protocol代理设计模式
传入的对象代替当前类完成某项功能(代替实现某些方法),称为代理模式
1)目的
——解耦(主类不在依赖特定某个类型,而是依赖代理,而很多类型都可以作为代理)
——增加程序的灵活性、可扩展性
——通知、事件监听……
2)思路&步骤
——定义协议:声明代理需要实现的方法
——创建一个delegate(代理)类,遵守上面协议
——在需要代理的类中,定义一个遵守代理协议的id类型的成员变量
——在需要代理类方法中调用代理类方法
——在main.m或其他需要代理类的文件中,为代理类成员变量赋值
补充:.h文件中@protocol是告诉编译器这是个协议,在.m文件中导入协议文件
相关文章推荐
- 【黑马程序员】Java笔记--多线程
- 程序员技术练级攻略
- 黑马程序员——单例设计模式
- java--反射--黑马程序员
- java--多线程(2)--黑马程序员
- java--多线程(1)--黑马程序员
- java--IO流(2)--黑马程序员
- java--IO流(1)--黑马程序员
- java--集合(2)--黑马程序员
- 15个程序员需要知道的Chrome扩展
- java--集合(1)--黑马程序员
- java--面向对象(4)--黑马程序员
- 黑马程序员--学习OC加强内存管理
- java--面向对象(3)--黑马程序员
- 面试题2 设计一个类,我们只能生成该类的一个实例
- Java笔试面试题003
- Java笔试面试题002
- (剑指Offer)面试题58:二叉树的下一个结点
- 黑马程序员——java开发环境配置
- 怎样才是理想的程序员