OC视频笔记-类目和延展
来源:互联网 发布:淘宝雅思口语陪练 编辑:程序博客网 时间:2024/06/05 06:02
类的扩展
1.类目的基本概念和用法
类目(category)的基本概念
封装是面向对象的一个特征,OC也不例外,但是有的时候我们会碰到这样一种情况,比如我封装了一个类,不想再动
它,可是随着程序功能的增加,需要在那个类中增加一个小小的方法,这时我们就不必在那个类中做修改或者定义一个子类,只需要在用到那个方法时随手添加一个该类的类别(category)即可。
(1)在类目定义的方法,会成为原始类的一部分,与其他方法的调用没有区别。
(2)通过给父类定义类目方法,其子类也会继承这些方法。如果子类添加类目方法,父类则不会拥有子类的类目方法。
A.类目方法的应用
a.对现有类进行扩展:比如,你可以扩展Cocoa touch框架中的类,你在类目中增加的方法会被子类所继承,而且在运行时跟其他的方法没有区别。
b.作为子类的替代手段:不需要定义和使用一个子类,你可以通过类目直接向已有的类中添加方法。
c.对类中的方法归类:利用category把一个庞大的类划分为小块来分别进行开发,从而更好地对类中的方法进行更新和维护。
B.类目方法的局限性
a.无法向类目中,添加新的实例变量,类目没有位置来容纳实例变量。如果想增加类的实例变量,只能通过定义子类的方式。
b.如若,在类目中覆盖现有类的方法。这样会引起super消息的断裂,因为类目中的方法具有更高的优先级,因此,一般不要覆盖现有类中的方法。
类目的命名与用法
类目的命名规则:类名+扩展方法,如“NSString+Revert”。
类目的接口声明与类的定义十分相似,但类目不继承父类,只需要带有一个括号,表明该类目的主要用途。
****************类目的定义和实现****************
#import<Foundation/Foundation.h>
//.h文件 类目的定义
@interface NSString (Revert)
- (void)test;
@end
- (void)test{
}@end
************************************************
****************类方法的定义和实现**************
#import<Foundation/Foundation.h>
//.h文件 类的定义
@interface Revert:NSObject
- (void)test;
@end;
#import“Revert.h”
//.m文件
类中方法的实现
@implementation Revert
- (void)test{
}
@end
************************************************
2.延展的基本概念和用法
延展(Extension)的基本概念和用法
a.类的延展就如同是“匿名”的类目,延展中声明的方法在类本身的@implementation和它对应的@end之间实现。
#import“Person.h”
//.m文件中 延展的声明
@interface Person ()
- (void)private;
@end
//.m文件中 延展的实现
@implementation Person
- (void)private {
//.m文件中 doing something
}
@end
#import <Foundation/Foundation.h>
//.h文件中 类目的声明
@interface Person (Creation)
- (void)initPerson;
@end
//.m文件中 类目的实现
@implementation Person (Creation)
- (id)initPerson {
//.m文件中 doing something
return nil;
}
*****************************************************
延展的作用相当于是对类的方法进行一个归类,在延展中声明的方法都是类的私有方法。在类的.h文件中声明的方法都是公有的方法,延展使用在类的.m文件中。
3.协议(protocol)的基本概念
协议的声明看起来比较类似一个类的接口,不同的是协议没有父类也不能定义实例变量。协议是一种特殊的程序设计结构,用于声明专门被别的类实现的方法。
协议在以下场合非常有用:
a.需要由别的类实现的方法;
b.声明未知类的接口;
a.协议可以被任何类实现;
b.协议本身不是类,它是定义了一个其他类可以实现的接口;
c.类目也可以采用协议。
协议的声明和实现
协议中的关键字
a.@required:表示必须强制实现的方法;
b.@optional:表示可以有选择性的实现方法。
/*协议的声明*/
@protocol HelloProtocol <NSObject>
@optional
- (void)optionalMethod1;
- (void)optionalMethod2;
@required
- (void)requiredMethod1;
@end
/*采用了该协议*/
@interface Person:NSObject <HelloProtocol,otherProtocol>
@end
@implementation Person
- (void)requiredMethod1 {
}//实现了该协议中的方法,可以选择不实现
1.类目的基本概念和用法
类目(category)的基本概念
封装是面向对象的一个特征,OC也不例外,但是有的时候我们会碰到这样一种情况,比如我封装了一个类,不想再动
它,可是随着程序功能的增加,需要在那个类中增加一个小小的方法,这时我们就不必在那个类中做修改或者定义一个子类,只需要在用到那个方法时随手添加一个该类的类别(category)即可。
(1)在类目定义的方法,会成为原始类的一部分,与其他方法的调用没有区别。
(2)通过给父类定义类目方法,其子类也会继承这些方法。如果子类添加类目方法,父类则不会拥有子类的类目方法。
A.类目方法的应用
a.对现有类进行扩展:比如,你可以扩展Cocoa touch框架中的类,你在类目中增加的方法会被子类所继承,而且在运行时跟其他的方法没有区别。
b.作为子类的替代手段:不需要定义和使用一个子类,你可以通过类目直接向已有的类中添加方法。
c.对类中的方法归类:利用category把一个庞大的类划分为小块来分别进行开发,从而更好地对类中的方法进行更新和维护。
B.类目方法的局限性
a.无法向类目中,添加新的实例变量,类目没有位置来容纳实例变量。如果想增加类的实例变量,只能通过定义子类的方式。
b.如若,在类目中覆盖现有类的方法。这样会引起super消息的断裂,因为类目中的方法具有更高的优先级,因此,一般不要覆盖现有类中的方法。
类目的命名与用法
类目的命名规则:类名+扩展方法,如“NSString+Revert”。
类目的接口声明与类的定义十分相似,但类目不继承父类,只需要带有一个括号,表明该类目的主要用途。
****************类目的定义和实现****************
#import<Foundation/Foundation.h>
//.h文件 类目的定义
@interface NSString (Revert)
- (void)test;
@end
@import “NSString+Revert.h”
//.m文件 类目方法的实现
@implementation NSString (Revert)- (void)test{
}@end
************************************************
****************类方法的定义和实现**************
#import<Foundation/Foundation.h>
//.h文件 类的定义
@interface Revert:NSObject
- (void)test;
@end;
#import“Revert.h”
//.m文件
类中方法的实现
@implementation Revert
- (void)test{
}
@end
************************************************
2.延展的基本概念和用法
延展(Extension)的基本概念和用法
a.类的延展就如同是“匿名”的类目,延展中声明的方法在类本身的@implementation和它对应的@end之间实现。
b.类有时需要方法只有自己可见,我们可以通过延展的方式定义类的私有方法。
#import“Person.h”
//.m文件中 延展的声明
@interface Person ()
- (void)private;
@end
//.m文件中 延展的实现
@implementation Person
- (void)private {
//.m文件中 doing something
}
@end
*************************************************
#import <Foundation/Foundation.h>
//.h文件中 类目的声明
@interface Person (Creation)
- (void)initPerson;
@end
//.m文件中 类目的实现
@implementation Person (Creation)
- (id)initPerson {
//.m文件中 doing something
return nil;
}
*****************************************************
延展的作用相当于是对类的方法进行一个归类,在延展中声明的方法都是类的私有方法。在类的.h文件中声明的方法都是公有的方法,延展使用在类的.m文件中。
3.协议(protocol)的基本概念
协议的声明看起来比较类似一个类的接口,不同的是协议没有父类也不能定义实例变量。协议是一种特殊的程序设计结构,用于声明专门被别的类实现的方法。
协议在以下场合非常有用:
a.需要由别的类实现的方法;
b.声明未知类的接口;
c.两个类之间的通信;
协议的基本特点:a.协议可以被任何类实现;
b.协议本身不是类,它是定义了一个其他类可以实现的接口;
c.类目也可以采用协议。
协议的声明和实现
协议中的关键字
a.@required:表示必须强制实现的方法;
b.@optional:表示可以有选择性的实现方法。
/*协议的声明*/
@protocol HelloProtocol <NSObject>
@optional
- (void)optionalMethod1;
- (void)optionalMethod2;
@required
- (void)requiredMethod1;
@end
/*采用了该协议*/
@interface Person:NSObject <HelloProtocol,otherProtocol>
@end
@implementation Person
- (void)requiredMethod1 {
}
//实现了该协议中的方法,且方法必须实现
- (void)optionalMethod1 {}//实现了该协议中的方法,可以选择不实现
- (void)optionalMethod2 {}//实现了该协议中的方法,可以选择不实现
0 0
- OC视频笔记-类目和延展
- OC视频笔记5.1(类目的概念和使用)5.2(延展)
- OC学习:类目和延展
- OC循环渐进:类目和延展
- OC学习:协议、类目和延展
- OC-类目延展协议
- IOS学习笔记之类目和延展
- OC之类目、延展、协议、代理(笔记…
- oc NSDate / Category类目 / 延展
- oc语言 类目与延展
- OC中类目,延展,协议
- OC 08 类目延展协议
- OC中的类目和延展以及非正式协议
- 类目 延展 和 协议
- 类目和延展
- 类目,延展和协议
- 延展和类目
- 类目和延展
- 第十一章 11.4节练习
- android 使用TextView/EditText应该注意的地方
- ugg雪靴專賣店n去哪兒買,台灣專櫃 (16301)
- mbt瑞士健體鞋門市x去哪兒買,台灣專櫃 (32133)
- fitflop專櫃g去哪兒買,台灣專櫃 (25278)
- OC视频笔记-类目和延展
- Java ClassLoader基础及加载不同依赖 Jar 中的公共类
- SQL各种连接查询详解(左连接、右连接..)
- php循环控制语句
- hd2036改革春风吹满地
- bzoj1588(平衡树入门题)
- php操作mssql基础
- HDOJ 题目1075What Are You Talking About(字典树)
- 面向对象的三个基本元素,五个基本原则