Objective-C分类 (category),扩展(Extension)和协议(protocol)

@类目-分类(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];
      
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值