美文网首页
runtime添加属性

runtime添加属性

作者: 大哈哈哈哈 | 来源:发表于2016-05-25 15:52 被阅读67次

项目初期,项目经理提出一个需求,如下:

每一个controller要单独管理自己的网络请求操作,在controller销毁的时候要取消掉相应的网络请求。

为了整个项目统一,我们需要在基类中来实现,为了区别我们新建一个基类的category。
当然我们需要用一个数组来存放我们的操作,可是category又不能直接添加成员变量,那我们可以直接通过runtime来直接关联一个变量:
头文件如下:
#import <UIKit/UIKit.h>
@class AFHTTPRequestOperation;
@interface UIViewController (Operation)
@property(nonatomic,readonly)NSMutableArray *operations;
-(void)addOperation:(AFHTTPRequestOperation *)operation;
-(void)removeOperation:(AFHTTPRequestOperation *)operation;
-(void)cancelAllOperation;
@end

具体实现如下:

#import "UIViewController+Operation.h"
#import <objc/runtime.h>
#import "XYQApi.h"
@implementation UIViewController (Operation)
static char kOperationKey;

- (void)setOperations:(NSMutableArray *)operations{
  if (!operations) {
      operations = [[NSMutableArray alloc]init];
      objc_setAssociatedObject(self, &kOperationKey, operations, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
  }
}
-(NSMutableArray *)operations
{
    return objc_getAssociatedObject(self, &kOperationKey);
}

-(void)addOperation:(AFHTTPRequestOperation *)operation
{
    [self.operations addObject:operation];
}
-(void)removeOperation:(AFHTTPRequestOperation *)operation
{
    [self.operations removeObject:operation];
}
-(void)cancelAllOperation
{
    for (AFHTTPRequestOperation * op in self.operations) {
        [XYQApi cancelOperation:op];
    }
    [self.operations removeAllObjects];
}
@end

这样每一个controller都可以单独的管理自己的网络请求操作了

相关文章

  • runtime 分类不能添加属性

    分类不能添加属性,类别可以,添加runtime之后,可以添加属性

  • runtime的理解(二)

    主要内容 利用 runtime 交换方法 利用 runtime 动态添加方法 利用 runtime 动态添加属性 ...

  • iOS用runtime给Category添加属性

    用runtime给Category添加属性 1、添加属性 (1)UIViewController+CXHelp.h...

  • runtime添加属性

      运行期不能对类对象添加ivar,因为在编译期类的内存大小布局已经确定,在运行期不能修改类对象的内存空间,所以不...

  • runtime添加属性

    OBJC_ASSOCIATION_COPY。 enum { OBJC_ASSOCIATION_ASSIGN = 0...

  • runtime添加属性

    项目初期,项目经理提出一个需求,如下: 为了整个项目统一,我们需要在基类中来实现,为了区别我们新建一个基类的cat...

  • runtime添加属性

    mark runtime在类别category中增加属性的简单方法; UIView的tap事件快速获取; UIBu...

  • 动态添加属性

    动态添加属性:什么时候需要动态添加属性? 开发场景:给系统的类添加属性的时候,可以使用runtime动态添加属性方...

  • Runtime

    概述 runtime 是什么 isa指针 runtime 怎么添加属性,方法等 runtime 如何实现weak属...

  • Objective-C关联对象的实现

    目的 在 NSObject 类中,添加 name 属性。 方案 利用 runtime 的相关方法: 动态添加属性 ...

网友评论

      本文标题:runtime添加属性

      本文链接:https://www.haomeiwen.com/subject/bajtdttx.html