Objective c 从父类的实例实例化子类

Objective c 从父类的实例实例化子类,objective-c,Objective C,之前不需要了解AFN网络,但可能会有所帮助 我正在使用AFNetworking,我想创建一个AFHTTPRequestOperation的子类,它有两个额外的属性和方法 我遇到的问题是,我正在使用AFHTTPRequestOperationManager的工厂方法生成我的AFHTTPRequestOperations,显然我不想更改AFNetworking库中的任何核心代码 所以我想做的是这样的: @implementation VP_AFHTTPRequestOperation : AFHTT

之前不需要了解AFN网络,但可能会有所帮助

我正在使用AFNetworking,我想创建一个AFHTTPRequestOperation的子类,它有两个额外的属性和方法

我遇到的问题是,我正在使用AFHTTPRequestOperationManager的工厂方法生成我的AFHTTPRequestOperations,显然我不想更改AFNetworking库中的任何核心代码

所以我想做的是这样的:

@implementation VP_AFHTTPRequestOperation : AFHTTPRequestOperation

+ (id)instantiateUsingAFHTTPRequestOperation:(AFHTTPRequestOperation*)reqOp {
    //I want to create an instance of VP_AFHTTPRequestOperation using the reqOp
    self = reqOp; //I can't just do this, but I don't know what to do
    return self;
}

- (void)mySubclassMethod { /* ... */ }
@end

我非常感谢任何建议

将AFHTTPRequestOperationManager子类化,并使其在
HTTPRequestOperationWithRequest

AFAICS不需要修改任何框架代码

@interface VP_AFHTTPRequestOperationManager : AFHTTPRequestOperationManager 
@end     

@implementation VP_AFHTTPRequestOperationManager

+ (instancetype)manager { 
    return [[[self class] alloc] init]; 
}

- (AFHTTPRequestOperation *)HTTPRequestOperationWithRequest:(NSURLRequest *)request
                                                success:(void (^) (AFHTTPRequestOperation *operation, id responseObject))success
                                                failure:(void (^)(AFHTTPRequestOperation *operation, NSError *error))failure
{
    VP_AFHTTPRequestOperation *operation = [[VP_AFHTTPRequestOperation alloc] initWithRequest:request];
    operation.responseSerializer = self.responseSerializer;
    operation.shouldUseCredentialStorage = self.shouldUseCredentialStorage;
    operation.credential = self.credential;
    operation.securityPolicy = self.securityPolicy;

    [operation setCompletionBlockWithSuccess:success failure:failure];

    return operation;
}

@end

我认为您可以通过子类化
AFHTTPRequestOperationManager
并在重写
HTTPRequestOperationWithRequest:success:failure
中使用
AFHTTPRequestOperation
的子类来做您想做的事情。文档中对其进行了简要描述:

要更改所有请求操作构造的行为,请执行以下操作: AFHTTPRequestOperationManager子类,重写 HTTPRequestOperationWithRequest:成功:失败


为什么?你需要补充什么?为什么?好问题,我很可能需要做一些事情,而不是我所要求的。我需要添加2个属性并覆盖AFHTTPRequestOperation的一个方法(所以我想我需要对它进行子类化)——但我不想更改生成AFHTTPRequestOperation的核心AFHTTPRequestManager工厂方法。所以我希望我可以在我的子类上使用工厂方法生成AFHTTPRequestOperation的子类实例,但这可能不是正确的方法。@Adam:那么你到底需要向
AFHTTPRequestOperation
添加什么呢?我想向
setCompletionBlockwithSuccess
添加功能。。。(在我的子类中,我将添加几行代码,然后调用
[super-setCompletionBlock…]
它将传递到函数中的成功和失败块复制到2个属性中,我将添加到我的子类中。为什么?这些块已经由操作存储。我的错,我不是想在类方法中使用self,你是对的,但这仍然没有真正的帮助。还值得指出的是,我正在使用新的AFN,它不再有用了使用AFHTTPClient。你不想只重写AfHttpRequestOperationManager我不想修改AFNetworking的任何核心代码-这是一个外部依赖项,我实际上是使用cocoapods加载的,所以当它有更新时,我不希望我的任何代码混入其中。我说的;)出于某种原因,我无法推断他不想要这个:P@Daij-Djan-我不想也必须将AFHTTPRequestOperationManager子类化。但看起来唯一可行的方法就是将AFHTTPRequestOperationManager子类化。