您的位置:首页 > 移动开发 > Objective-C

Objective-C基础1-类目(Category)和延展(Extension)的区别

2015-12-24 19:36 417 查看

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/原创,欢迎转载分享。请尊重作者劳动,转载时保留该声明和作者博客链接,谢谢
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: