Object-C类目、延展
类目
定义:为现有工程中的类和系统类添加新的方法和属性。
作用:在类目中添加的方法和属性在原类中添加方法和属性是一样的,都能够被类和类的子类调用,这样可以快速便利地维护和开发项目。
note:如何在类目中为原类添加新的属性?
创建一个Tool类
Tool.h文件
#import <Foundation/Foundation.h>
@interface Tool : NSObject
@property (nonatomic,strong)NSString *property1 ;
-(void)function1 ;
@end
#pragma mark ----------类目---------
@interface Tool (ToolExtension)
@property (nonatomic,strong)NSString *property2 ;
-(void)function2 ;
@end
Tool.m文件
#import "Tool.h"
#import "objc/runtime.h"
@implementation Tool (ToolExtension)
#pragma mark ---------合成类目中的属性--------------
-(void)setProperty2:(NSString *)property2
{
objc_setAssociatedObject(self, @selector(property2), property2, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}
-(NSString *)property2
{
return objc_getAssociatedObject(self, @selector(property2));
}
-(void)function2
{
NSLog(@"function2");
}
@end
延展
定义:为自定义类添加私有方法
#import "Tool.h"
#import "objc/runtime.h"
@interface Tool ()
-(void)privateFunction;
@end
@implementation Tool
-(void)function1
{
NSLog(@"function1 ");
}
#pragma mark extension
-(void)privateFunction
{
NSLog(@"我是延展,我是私有方法");
}
@end
@implementation Tool (ToolExtension)
#pragma mark ---------合成类目中的属性--------------
-(void)setProperty2:(NSString *)property2
{
objc_setAssociatedObject(self, @selector(property2), property2, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}
-(NSString *)property2
{
return objc_getAssociatedObject(self, @selector(property2));
}
-(void)function2
{
NSLog(@"function2");
}
@end