扩展 (Class Extension也有人称为匿名分类)
- 作用:
- 能为某个类附加额外的属性,成员变量,方法声明
- 一般的类扩展写到.m文件中
- 一般的私有属性写到类扩展
- 使用格式:
@interface Mitchell() //属性 //方法 @end
扩展,一般使用在实现类的地方,在该类的.m中实现,一般实现一些不想对外暴露的属性和方法;
分类
分类能够做到的事情主要是:
即使在你不知道一个类的源码情况下,向这个类添加扩展的方法。
此外,分类能够保证你的实现类和其他的文件区分开。
比如:
UIImage+Addons.h
@interface UIImage (Addons)
+ (UIImage *)imageWithColor:(UIColor *)color size:(CGSize)size;
@end
UIImage+Addons.m
@implementation UIImage (Addons)
+ (UIImage *)imageWithColor:(UIColor *)color size:(CGSize)size {
return [UIImage imageWithColor:color strokeColor:nil size:size radius:0.f];
}
@end
OC的分类允许给分类添加属性,但不会自动生成getter、setter方法,可以通过关联来实现。
-(void)setStr:(NSString *)str
{
objc_setAssociatedObject(self, strKey, str, OBJC_ASSOCIATION_COPY);
}
-(NSString *)str
{
return objc_getAssociatedObject(self, strKey);
}
@end