前几天在做自定义TableCell,感觉突然需要一个Resize,需要点自由的空间,在网上搜索了一下:
#import <UIKit/UIKit.h>
@interface UIImage(Resize)
-(UIImage*)resize:(CGRect)rect;
@end
#import "UIImageUtil.h"
@implementation UIImage(Resize)
-(UIImage*)resize:(CGRect)rect{
...
}
@end
就是这么简单,UIImage就拥有了可变大小。尤其在对系统类或者第三方库进行扩展的时候,不需要继承就可以添加新的方法。
使用Category需要注意几点:
- Category的方法不一定在@Implementation中实现,可以在其他位置实现,但必须在继承树中可见
- Category中理论上不能声明额外的变量,但是可以使用原有类中的变量
- Category中如需添加新的变量可以使用@dynamic来补充
可以参考Apple官方文档
Extension和Category的区别:
- Extension更像是匿名的Category
- Extension中的方法必须在@Implementation中实现
- Extension可以声明新的变量
代码示例:
@interface MyClass : NSObject
- (float)value;
@end
@interface MyClass () {
float value;
}
- (void)setValue:(float)newValue;
@end
@implementation MyClass
- (float)value {
return value;
}
- (void)setValue:(float)newValue {
value = newValue;
}
@end