- 不要等到明天钥弯,明天太遙遠(yuǎn),今天就行動(dòng)督禽。
須讀:看完該文章你能做什么脆霎?
不使用
繼承
的情況下,為一個(gè)類擴(kuò)充方法
學(xué)習(xí)前:你必須會(huì)什么?(在這里我已經(jīng)默認(rèn)你具備C語(yǔ)言的基礎(chǔ)了)
什么是類,什么是方法(的聲明/實(shí)現(xiàn))
一、本章筆記
一狈惫、Category
Category 有很多中翻譯 : 分類睛蛛、類別、類目(一般叫分類)
作用
在不修改原有類的情況下,為這個(gè)類擴(kuò)充一些方法
注意:繼承也可以實(shí)現(xiàn)
二胧谈、分類的格式(以及分類包含什么)
方法:
方法的聲明:
方法的實(shí)現(xiàn):
所以: 通過分類給某一個(gè)類擴(kuò)充方法,也分為聲明 和 實(shí)現(xiàn)
基本格式
--- 分類的聲明
@interface ClassName(CategoryName)
NewMethod; // 在分類添加方法
// 不允許在分類中添加變量
@end
ClassName : 需要給那個(gè)類擴(kuò)充方法
CategoryName : 分類的名稱
NewMethod : 擴(kuò)充的方法
--- 分類的實(shí)現(xiàn)
@implementation ClassName(CategoryName)
NewMethod
...
@end
ClassName : 需要給那個(gè)類擴(kuò)充方法
CategoryName : 分類的名稱
NewMethod : 擴(kuò)充的方法
三忆肾、官方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"
/*
方法:
方法的聲明:
方法的實(shí)現(xiàn):
所以: 通過分類給某一個(gè)類擴(kuò)充方法,也分為聲明 和 實(shí)現(xiàn)
基本格式
--- 分類的聲明
@interface ClassName(CategoryName)
NewMethod; // 在分類添加方法
// 不允許在分類中添加變量
@end
ClassName : 需要給那個(gè)類擴(kuò)充方法
CategoryName : 分類的名稱
NewMethod : 擴(kuò)充的方法
--- 分類的實(shí)現(xiàn)
@implementation ClassName(CategoryName)
NewMethod
...
@end
ClassName : 需要給那個(gè)類擴(kuò)充方法
CategoryName : 分類的名稱
NewMethod : 擴(kuò)充的方法
*/
#pragma mark - main函數(shù)
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)
// 擴(kuò)充方法
- (void)playFootball;
- (void)playBasketball;
@end
>>>.m
#import "Person+LYH.h"
@implementation Person (LYH)
// 實(shí)現(xiàn)擴(kuò)充方法
- (void)playFootball
{
NSLog(@"%s",__func__);
}
- (void)playBasketball
{
NSLog(@"%s",__func__);
}
@end
1.如何創(chuàng)建一個(gè)分類
image.png
image.png
image.png
2.在項(xiàng)目中分類文件的顯示
image.png
image.png