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