OC学习篇之-----类目·延展·协议之--类目

来源:互联网 发布:linux nano vim 编辑:程序博客网 时间:2024/06/11 08:07

本篇为:类目
以下是个人理解中的类目延展协议:

类目:为本类添加新的方法,例如为NSObject类,继承后自雷同样继承父类的类目中的方法
协议:声明了可以被任何类实现的方法(本身不实现,遵守此协议的类去实现)
延展:为本类添加私有方法,延展的方法只供本类使用

注意:类目和延展都是不可以添加类的实例变量,若必须添加,应该用继承来达到目的(不推荐代码中的添加属性,然后通过重写设置器达到目的)

类目:
1.1.为已知的类添加新的方法
1.2不可添加成员变量
1.3可以被子类继承
2.1.可以在本文件中创建,类目的声明文件需要在已知的类的声明文件中的文件头中,类目的实现文件需要在已知的类的实现文件中的头文件中
2.2.格式:声明文件:@interface 类名 (类目名);
实现文件:@implementation 类名 (类目名);
2.3也可以新创文件,格式与上面一样;
2.4类目中声明的方法可以不在本类中实现,可以在子类中再实现:如下:
NSObject的类目.h文件

#import <Foundation/Foundation.h>//给NSObject添加一个类目,即非正式协议@interface NSObject (NSObject_Category)-(void)test1;-(void)test2;@end

NSObject的类目.m文件

#import "NSObject+NSObject_Category.h"@implementation NSObject (NSObject_Category)//这里可以不实现,可以在继承了这个类的子类中实现这两个方法//-(void)test1{//    NSLog(@"i ma test1");//}//////-(void)test2{//    NSLog(@"i ma test2");//}@end

以下是继承了NSObject类的子类的.h文件

#import <Foundation/Foundation.h>#import "NSObject+NSObject_Category.h"@interface MyCalss : NSObject@end

以下是继承了NSObject类的子类的.m文件
父类中类目的方法可以再子类中实现

@implementation MyCalss-(void)test1{    NSLog(@"i ma test1,父类中我不实现,我实在子类中实现的");}-(void)test2{    NSLog(@"i ma test2,父类中我不实现,我实在子类中实现的");}@end

总结:个人感觉类目也是非常强大的,例如一些OC自身的类,当我们需要用到OC的类的时候,但是里面并没有我们要的方法的时候,我们就可以通过给这类一个类目,然后声明实现我们需要的方法就可以了

0 0
原创粉丝点击