首页 > 代码库 > oc类的功能的拓展与延展

oc类的功能的拓展与延展

类的扩展

一   类目

 (类目也称为分类,为没有源码的类添加方法。)

1.作用

  1)可以扩展别人的类,可以作为子类的替代方法。

  2)把同一类的代码放到多个文件中。

2.形式

  1)文件名:目标类+类目名.h

                        目标类+类目名.m

  2).h文件中

 

      @interface 需要扩展的类的类名(分类名)

       -( )method;

      @end

eg:

  为字符串添加一个类

NSString+SayHi.h

@interface NSString (SayHi)

-(void)sayHi;//为字符串添加方法

 

@end

  

NSString+SayHi.m

@implementation NSString (SayHi)

-(void)sayHi

{

    NSLog(@"我是一个特殊字符串 %@,我有sayHi方法",self);

}

@end

 

3.注意

 1)可以为同一个类添加多个类目,但类目名和方法不能重复。

  2)不可以随意重写类中的方法。

  3)所添加类与原类中方法同级,而且会被子类继承。

  

 

二 延展

(延展是特殊形式的类目)

1.作用

   为自己的类添加私有方法

2.形式

@interface  类名 

   -( )method;

@end

 

@implementation 类名

 ……

@end

 

 

 

eg:

Person.h

@interface Person : NSObject

-(void)sayHi;

 

@end

Person.m

@interface Person(extension)

-(void)test;//声明

@end

 

@implementation Person

-(void)sayHi

{

    [self test];

}

-(void)test//实现

 

{

    NSLog(@"...");

}

@end

 

3.注意

1)不需要创建新文件,直接在原类的.m文件中声明和实现。

2)所谓私有时候仅.m通过[self method]访问,不能在外部通过[对象 method]访问。

 

 

 

三  协议

(协议是由@protocol 声明的一组方法列表,只声明方法,不具体实现)

1.作用

将方法定义剥离出来,形成一个单独的文件。

2.形式

@protocol 协议名<其他协议>

-()method;

@end

注:方法默认是@required 必须实现,如果可以不实现用@optional。

 

3.代理模式

(由别人帮自己实现某个功能的模式称为代理模式)

1)接受代理

@ interface 类名:父类名 <协议名>(多个协议之间用逗号隔开)

….

@end

2)确认协议

@implementation  类名

协议方法

{

}

@end

(代理是谁,谁接受并确认协议)

 

 

4.注意

1)协议声明了可以被任何类实现的方法。

2)协议定义了一个其他对象可以实现的接口。