OC中的category&Extension

学习链接:https://blog.csdn.net/cordova/article/details/54620397

  话不多说,这篇博客说的很清楚了,在这就放测试的demo

category的demo  

.h文件
//
//  NSString+Category.h
//  learn_KVC
//
//  Created by 蔡佳明 on 2020/10/15.
//

#import <Foundation/Foundation.h>

NS_ASSUME_NONNULL_BEGIN

@interface NSString (Category)
{
    //不可以添加实例变量
}
// 也不会生成getter setter方法 所以property基本没意义

//扩展一个类方法
+(void)categoryClassMethodOfString;
// 扩展一个实例方法
-(void)categoryInstanceMethodOfString;
@end

NS_ASSUME_NONNULL_END


.m文件
//
//  NSString+Category.m
//  learn_KVC
//
//  Created by 蔡佳明 on 2020/10/15.
//

#import "NSString+Category.h"

@implementation NSString (Category)
//类方法可以实现 也可以不实现 但是不实现调用的话会导致程序崩溃
+(void)categoryClassMethodOfString
{
    NSLog(@"categoryClassMethodOfString!!");
}

-(void)categoryInstanceMethodOfString
{
    NSLog(@"categoryInstanceMethodOfString!!");
}
@end

测试文件
//
//  main.m
//  learn_KVC
//
//  Created by 蔡佳明 on 2020/10/15.
//

#import <Foundation/Foundation.h>
#import"NSString+Category.h"
int main()
{
    //调用类方法
    [NSString categoryClassMethodOfString];
    
    //调用实例方法
    NSString *string=[NSString new];
    [string categoryInstanceMethodOfString];
    return 0;
}

 类扩展的demo

#import"Person.h"

@interface Person ()
@property(nonatomic, copy)NSString *stringExtension;
- (void)testExtension;
@end


@implementation Person
- (void)testExtension {
   self.stringExtension = @"给扩展里面定义的属性字符串赋值";
   NSLog(@"定义的属性String是:%@", self.stringExtension);
}
@end
原文地址:https://www.cnblogs.com/caijiaming/p/13819542.html