基础知识
类扩展(class extension)是一种特殊的OC类别(category),它没有类别名,小括号里面是空的。
还记得类别的作用吗?主要可以在已有类的基础上添加新的方法,可以添加属性property
(必须是@dynamic
类型的)。
想进一步了解类别的小伙伴可以移步以下链接:浅谈OC类别(Category)
类别的局限性有两个:
- 不能添加实例变量,类别没有空间容纳实例变量。
- 名称冲突,类别中的方法如果和现有类重名,则类别的新方法会完全取代原有的方法,导致原有方法不可用,当然我们可以添加前缀来避免冲突。
类扩展是一种特殊的类别,它不需要名字。它的额外特点如下:
- 可以添加实例变量,这一点类别无法做到。
- 可以将只读权限改成可读写权限。
但需要注意的是,类扩展创建的实例变量,只能在这个类中使用。对于创建的属性和方法,如果没有添加到头文件.h,也只能本类中使用。
例子
在创建最简单的ViewController
类时,在.m中:
#import "ViewController.h"
@interface ViewController ()
{
NSString *sth;
}
@property (weak,nonatomic) IBOutlet UILabel *label;
@property (strong, nonatomic)NSDictionary *dic;
@end
代码中的@interface ViewController ()
表明这就是一个类扩展,因此我们能够后接花括号添加实例变量NSString *sth;
。
我们常常光顾着写代码,而忽视了对最常见东西的思考,且码且思考。
感谢阅读,希望能帮助到你!欢迎转载分享,请注明出处~