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

@interfacePerson(extension)

-(void)test;//声明

@end


@implementationPerson

-(void)sayHi

{

    [selftest];

}

-(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)协议定义了一个其他对象可以实现的接口。

你可能感兴趣的:(OC学习笔记——类的扩展)