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

@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
原创粉丝点击