我正在使用 ASIHTTPRequest 与服务器进行异步通信。它工作得很好,但我在不同的控制器中做请求,现在所有这些控制器中都有重复的方法。在单个类中抽象该代码(请求)的最佳方法是什么,以便我可以轻松地重用代码,从而使控制器更简单。我可以把它放在一个单例中(或在应用程序委托中),但我认为这不是一个好方法。或者也许用委托回调为它制定我自己的协议。
任何关于良好设计方法的建议都会有所帮助。谢谢。
我正在使用 ASIHTTPRequest 与服务器进行异步通信。它工作得很好,但我在不同的控制器中做请求,现在所有这些控制器中都有重复的方法。在单个类中抽象该代码(请求)的最佳方法是什么,以便我可以轻松地重用代码,从而使控制器更简单。我可以把它放在一个单例中(或在应用程序委托中),但我认为这不是一个好方法。或者也许用委托回调为它制定我自己的协议。
任何关于良好设计方法的建议都会有所帮助。谢谢。
我正在ASIHTTPRequest
大量使用 Ben Copsey 的子类作为 Web 服务客户端,我希望在接下来的几周内完成。这是一个很棒的项目,他的工作为我节省了大量时间和精力。
我ASINetworkQueue
在应用程序委托中进行了设置。向队列发送-go
消息,以便它准备好接收请求。我将我的子类请求添加到此队列中。每个请求都被处理并发出通知,我的视图控制器相应地处理响应数据。
我所做的是子类ASIHTTPRequest
和:
-init
方法(或-initWithParams:
方法,取决于请求)-requestFailed:
并-requestCompleted:
处理从 Web 服务返回的 HTTP 错误消息NSNotification
来自-requestCompleted:
方法中的错误处理的通知当视图控制器被推送并从导航堆栈中弹出时,我添加和删除不同的注册。一些视图控制器只需要监听某些子类请求类型。
侦听NSNotification
允许我发出UIAlertView
对话框让用户知道出了什么问题,或者在请求产生成功的 HTTP 错误时处理请求响应数据(例如,将结果馈送到 Core Data 存储中)。
无论请求成功还是失败,我都会-release
在完成请求时记住它。
我写了一个单例类来处理这个问题。
static TCHttpRequest *_sharedHttpRequest = nil;
+ (id)sharedRequest
{
@synchronized(self){
if (_sharedHttpRequest == nil) {
_sharedHttpRequest = [[self alloc] init];
}
}
return _sharedHttpRequest;
}
- (NSDictionary *)loginWithUserName:(NSString *)user password:(NSString *)pwd
{
NSURL *url = [NSURL URLWithString:@"/login" relativeToURL:_url];
ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url];
[request setCachePolicy:ASICacheForSessionDurationCacheStoragePolicy];
[request setTimeOutSeconds:HTTP_REQ_TIMEOUT];
[request addPostValue:user forKey:@"username"];
[request addPostValue:pwd forKey:@"password"];
request.delegate = self.delegate;
[_common_queue addOperation:request];
}
我看不出类方法和实例方法有什么关系?类方法实例化 TCHttpRequest 并保证只有一个实例。loginWithUserName 实例方法实例化 ASIFormDataRequest 并将其添加到公共队列中。我在这里看不到任何重用?