学习链接: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