目标C中的类继承和自定义^块执行C
我有一个应用程序,我在其中调用webservice以检索具有给定ID的JSON对象。 无论我在什么类中,获取对象的方法都是系统相同的,但成功块将会不同(id est,处理部分) - 例如使用AFNetworking。目标C中的类继承和自定义^块执行C
我正在寻找正确的方式来实现只有一次的getter部分,但能够自定义处理。
是下面这段代码的好办法:
-(void)getObjectWithId:(NSString*)id_{ NSString *ns1 = [NSString stringWithFormat:@"%@%@%@",HOSTNAME,API_DETAIL,id_];
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:ns1]];
AFJSONRequestOperation *operation =[AFJSONRequestOperation JSONRequestOperationWithRequest:request success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON) {
//Here I want to do different processing task accordingly inheritance level // current class
DLog(@"Response : %@ \n Request : %@",response,request);
[self processObject:JSON];
} failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, id JSON) {
//Do failure stuff
}];
[operation start];
}
然后:
-(void)processObject:(id)JSON{ //Customize according to current class
}
因此,所有的子类将从getObjectWithId
继承和拥有自己的执行processObject
我还应该考虑什么?是一种正确的方式?
回答:
您的选择将起作用,但它限制将代码放在超类中。如果限制适合您,那么继续。
另一种方法是创建一个辅助方法或管理器类,它承载了getObjectWithId:
方法,但提供2个参数,其中第二个参数是以JSON作为参数的块。通过这种方式,该方法包含所有可重用代码,并且该块允许与原始AFNetworking API相同的任意用法。
注意,“有道”是什么你的工作情况,也是理解和维护......
回答:
无需使用子类。代表会帮助你。
您可以创建一个实用程序类来检索JSON对象并为其声明一个协议。
@protocol WebServiceDelegate <NSObject> - (void)didRetrivalJsonObject:(id)json ;
@end
您还需要修改方法
- (void)getObjectWithId:(NSString*)id_ delegate:(id<WebServiceDelegate>)delegate {
NSString *ns1 = [NSString stringWithFormat:@"%@%@%@",HOSTNAME,API_DETAIL,id_];
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:ns1]];
AFJSONRequestOperation *operation =[AFJSONRequestOperation JSONRequestOperationWithRequest:request success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON) {
//Here I want to do different processing task accordingly inheritance level // current class
DLog(@"Response : %@ \n Request : %@",response,request);
[delegate processObject:JSON];
} failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, id JSON) {
//Do failure stuff
}];
[operation start];
}
以上是 目标C中的类继承和自定义^块执行C 的全部内容, 来源链接: utcz.com/qa/260044.html