@类目-分类(category)
1.类目:
类目(也成类别:Category)是一种为现有类添加新方法的方式
2.类目的局限性:
1)类目无法向已有的类中添加实例变量;
2)如果类目中的方法和已有类中的方法名称冲突时,类目中的方法优先级高,发生这种情况,则已有类的原始方法永无天日,最好的办法是将自己扩展的方法和原始方法区分开来。
3.代码示例:
// 对系统UIImage写的一个类目扩展方法
@interface UIImage (colorful)
+ (UIImage *)imageWithColor:(UIColor *)color;
@end
@implementation UIImage (colorful)
+ (UIImage *)imageWithColor:(UIColor *)color
{
CGRect rect = CGRectMake(0.0f, 0.0f, 1.0f, 1.0f);
UIGraphicsBeginImageContext(rect.size);
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetFillColorWithColor(context, [color CGColor]);
CGContextFillRect(context, rect);
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return image;
}
@end
@扩展--延展(Extension)
1.作用:
将方法变为类的私有方法
2.代码示例:
@interface AllModelData : NSObject
- (void)getAllModel; // 提供外部调用
@end
//注意此处:延展
@interface AllModelData () {
NSArray *_dataArray;
}
// 类的私有方法,外部不能调用
- (void)sortAllDataArray;
@end
@implementation AllModelData
- (void)sortAllDataArray{
}
@协议(protocol)
1.作用:
–定义了应该实现什么,但不关心具体怎么实现
•OC的协议是由@protocol声明的一组方法列表
–要求其它的类去实现,相当于@interface部分的声明
–@required标注的方法为必须实现方法
–@optional标注的方法为可以选择实现
•协议的实现又叫采用(遵守)协议
2.代码示例:
.h
@protocol NetWorkingRequestDelegate <NSObject>
@optional
//network网络请求成功
- (void)netWorkingRequest:(NetWorkingRequest *)netWorkingRequest successfulWithReceiveData:(NSData *)data;
//network网络请求失败
- (void)netWorkingRequest:(NetWorkingRequest *)netWorkingRequest didFailed:(NSError *)error;
//network下载进度
- (void)netWorkingRequest:(NetWorkingRequest *)netWorkingRequest downloadProgress:(CGFloat)progress;
@end
// 想要别做事的那个类中声明一个代理对象
@property (nonatomic,assign) id<NetWorkingRequestDelegate> delegate;
.m
if ([_delegate respondsToSelector:@selector(netWorkingRequest:downloadProgress:)]) {
[_delegate netWorkingRequest:self downloadProgress:progress];
[_delegate netWorkingRequest:self successfulWithReceiveData:_receiveData];
}