博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Category 分类
阅读量:6174 次
发布时间:2019-06-21

本文共 2034 字,大约阅读时间需要 6 分钟。

1、Category

  • 1)分类/类别(category):

    • 允许以模块的方式向现有类定义添加新的方法(默认不能添加实例变量)。用以扩展自己或他人以前实现的类,使它适合自己的需要。
    • 分类的名称括在类名之后的一对圆括号 "( )" 中。
    @interface CHStudent (Print)@end@implementation CHStudent (Print)@end
    • 分类文件名使用符号“+”来分隔类和分类的名字(Xcode 会自动生成)。
    CHStudent+Print.mCHStudent+Print.h
    • 分类用它可以将类的定义模块化到相关方法的组或分类中。它还提供了扩展现有类定义的简便方式,并且不必访问类的源代码,也无需创建子类。
    • 分类可以覆写该类中的另一个方法,但是通常认为这种做法是拙劣的设计习惯。一个类可以拥有多个分类。使用分类添加新方法来扩展类不仅会影响这个类,同时也会影响它的所有子类。分类为现有类添加新方法可能对你有用,但它们可能和该类的原始设计或意图不一致。对象/分类命名对必须是唯一的。
  • 2)分类中添加属性(实例变量):

    • iOS 开发中,分类默认不允许添加属性。
    • 但是如果在自己开发的框架中,希望在分类中动态添加属性,可以通过 OC 运行时的关联对象功能添加。在分类中,定义一个属性时,需要自己实现 getter & setter 方法,而且没有 _成员变量。
    • 运行时非常重要的一个应用:给分类动态添加属性,结果能够让框架包装的更好,让使用者做出最小的修改。

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;

转载于:https://www.cnblogs.com/CH520/p/9496848.html

你可能感兴趣的文章
时间戳前
查看>>
11月22日晚上海交大《PMI敏捷实践指南解读》线上沙龙欢迎你的参与!
查看>>
初识 Linux (VMware、CentOS 7)
查看>>
使用SpringMVC完成文件上传
查看>>
mysql Load Data InFile 的用法
查看>>
Go new vs make
查看>>
【云宏大讲坛】超融合,融合的不仅是基础架构
查看>>
pytnon入门的一些小实例
查看>>
ubuntu下的dock工具
查看>>
饿了么被上海市市场监督局予以警告处分
查看>>
Java项目读取配置文件时,找不到指定的文件???
查看>>
lua/luajit and tcc
查看>>
前端安全即JS代码安全,前端源码安全探讨!
查看>>
如何快速实现异地不同网络打印机共享
查看>>
openinstall免费服务对App推广有哪些作用?
查看>>
基于Docker的微服务CI CD流水线
查看>>
学好SEO需要掌握哪些知识要点?
查看>>
JetBrains GoLand macv2019.1.2中文版如何换成无牵引模式?
查看>>
电气火灾监控系统工作原理
查看>>
中使馆驳斥《金融时报》“中国网络威胁论”
查看>>