1、Category
2、向分类中添加方法
// NSString+Path.h@interface NSString (Path)// 声明方法- (NSString *)appendDocumentPath;@end// NSString+Path.m@implementation NSString (Path)// 实现方法- (NSString *)appendDocumentPath { NSString *dir = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES).lastObject; return [dir stringByAppendingPathComponent:self.lastPathComponent];}@end// ViewController.m// 调用自定义方法NSString *documentPath = [@"hello.png" appendDocumentPath];
3、向分类中添加属性
// NSString+Path.h@interface NSString (Path)// 声明属性@property (nonatomic, retain) NSURL *url;@end// NSString+Path.m// 包含运行时头文件#import @implementation NSString (Path)/** void objc_setAssociatedObject(id object, const void *key, id value, objc_AssociationPolicy policy) id objc_getAssociatedObject(id object, const void *key) 参数: object :属性的持有者 key :属性的键值 value :属性的数值 policy :属性的引用类型*/// 设置属性的键值const void *UrlKey = @"UrlKey";// 属性的 setter 方法- (void)setUrl:(NSURL *)url { // 用运行时方法设置属性的值 objc_setAssociatedObject(self, UrlKey, url, OBJC_ASSOCIATION_RETAIN);}// 属性的 getter 方法- (NSURL *)url { // 用运行时方法获取属性的值 return objc_getAssociatedObject(self, UrlKey);}@end// ViewController.mNSString *myStr = [[NSString alloc] init];// 设置自定义变量的值myStr.url = [NSURL URLWithString:@"http://123.com"];// 获取自定义变量的值NSURL *strUrl = myStr.url;