Objective-C基础1-类目(Category)和延展(Extension)的区别
类目也叫分类,主要作用是为没有源代码的类添加方法。
通过类目添加的方法会成为原类的一部分。从而达到扩展一个类的功能。
NSString+Addition.h文件
#import <Foundation/Foundation.h>
//类目的接口部分(声明添加的方法)
//不能添加实例变量
//子类可以继承父类所有的方法,包含Category中的方法
//类目包含两部分:接口部分、实现部分
//类目中添加的方法属于类的一部分
//类目中的方法的优先级高于类中定义的方法
//(类目中的方法与类中的方法重名了的时候,原方法会被覆盖)
@interface NSString (Addition)
- (void) test;
@end
NSString+Addition.m文件
#import "NSString+Addition.h"
@implementation NSString (Addition)
- (void) test{
NSLog(@"test!NSString中添加的方法!");
}
@end
类的延展
Person.h
#import <Foundation/Foundation.h>
@interface Person : NSObject
-(void) sayHi;
@end
Person.m
#import "Person.h"
//Person类的延展--体现封装-类的延展写在类的实现文件中 .m文件中
//延展是给有源代码(有.m文件)的类使用的
//延展只有接口部分,没有实现部分。延展是用于管理实例变量和“私有”方法的
//在延展中声明的方法,在类的实现部分进行实现
@interface Person ()
{
//类的内部需要使用,但是不想对外公开的
NSString * _name;
NSString * _gender;
}
//仅在类的内部使用,不提供给类的外部使用
- (void) introduce;
//声明私有方法时,可以使用前缀,作为区分
//不要以下划线开头- (void) _test; //苹果自己内部使用
- (void) private_test;
@end
@implementation Person
-(void) sayHi{
NSLog(@"hi");
}
- (void) introduce{
NSLog(@"my introduce");
}
@end
著作权声明:本文由http://www.bestnathan.com/原创,欢迎转载分享。请尊重作者劳动,转载时保留该声明和作者博客链接,谢谢