- 不要等到明天,明天太遥远,今天就行动。
须读:看完该文章你能做什么?
不使用
继承
的情况下,为一个类扩充方法
学习前:你必须会什么?(在这里我已经默认你具备C语言的基础了)
什么是类,什么是方法(的声明/实现)
一、本章笔记
一、Category
Category 有很多中翻译 : 分类、类别、类目(一般叫分类)
作用
在不修改原有类的情况下,为这个类扩充一些方法
注意:继承也可以实现
二、分类的格式(以及分类包含什么)
方法:
方法的声明:
方法的实现:
所以: 通过分类给某一个类扩充方法,也分为声明 和 实现
基本格式
--- 分类的声明
@interface ClassName(CategoryName)
NewMethod; // 在分类添加方法
// 不允许在分类中添加变量
@end
ClassName : 需要给那个类扩充方法
CategoryName : 分类的名称
NewMethod : 扩充的方法
--- 分类的实现
@implementation ClassName(CategoryName)
NewMethod
...
@end
ClassName : 需要给那个类扩充方法
CategoryName : 分类的名称
NewMethod : 扩充的方法
三、官方NSString的分类
@interface NSString (NSStringExtensionMethods)
#pragma mark *** Substrings ***
- (NSString *)substringFromIndex:(NSUInteger)from;
- (NSString *)substringToIndex:(NSUInteger)to;
- (NSString *)substringWithRange:(NSRange)range;
....
@end
官方NSArray的分类
@interface NSArray<ObjectType> (NSExtendedArray)
方法...
@end
@interface NSArray<ObjectType> (NSArrayCreation)
方法...
@end
@interface NSArray<ObjectType> (NSDeprecated)
方法...
@end
二、code
main.m
#pragma mark 08-分类基本概念
#pragma mark - 代码
#import <Foundation/Foundation.h>
#pragma mark 类
#import "Person.h"
#import "Person+LYH.h"
/*
方法:
方法的声明:
方法的实现:
所以: 通过分类给某一个类扩充方法,也分为声明 和 实现
基本格式
--- 分类的声明
@interface ClassName(CategoryName)
NewMethod; // 在分类添加方法
// 不允许在分类中添加变量
@end
ClassName : 需要给那个类扩充方法
CategoryName : 分类的名称
NewMethod : 扩充的方法
--- 分类的实现
@implementation ClassName(CategoryName)
NewMethod
...
@end
ClassName : 需要给那个类扩充方法
CategoryName : 分类的名称
NewMethod : 扩充的方法
*/
#pragma mark - main函数
int main(int argc, const char * argv[])
{
Person *p = [[Person alloc]init];
p.age = 33;
[p say];
[p playFootball];
[p playBasketball];
// NSString
// NSArray
return 0;
}
Person
>>>.h
#import <Foundation/Foundation.h>
@interface Person : NSObject
@property (nonatomic,assign) int age;
- (void)say;
@end
>>>.m
#import "Person.h"
@implementation Person
- (void)say
{
NSLog(@"age = %i",_age);
}
@end
Person+LYH (分类[Category])
>>>.h
#import "Person.h"
@interface Person (LYH)
// 扩充方法
- (void)playFootball;
- (void)playBasketball;
@end
>>>.m
#import "Person+LYH.h"
@implementation Person (LYH)
// 实现扩充方法
- (void)playFootball
{
NSLog(@"%s",__func__);
}
- (void)playBasketball
{
NSLog(@"%s",__func__);
}
@end
1.如何创建一个分类
2.在项目中分类文件的显示