目标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

回到顶部