另一个ASIHTTPRequest异步委托?

时间:2010-08-19 03:13:02

标签: iphone delegates asihttprequest

如何创建一个包含它自己的委托的新文件,以便我可以使用自己的异步结尾创建ASIHTTPRequest,并且只需要将[request setDelegate:self];设置为[request setDelegate:AlternateDelegate];之类的内容就足够了并且只需在文档的开头添加一个include来引用AlternateDelegate委托

2 个答案:

答案 0 :(得分:1)

ASIHTTPRequest的委托只是一个标准的目标C对象。只需创建一个新类,包含它的标题,创建/获取对象并将委托设置为该对象。

你试过这个并遇到问题吗?如果是这样,问题是什么?

答案 1 :(得分:1)

我知道这个问题已经过时了,但万一有人碰到它:

@Hankweb似乎在谈论将请求用作自己的委托。当然有可能出现这种情况。例如,我正在开发一个项目,该项目使用ASIHTTPRequest从远程源获取JSON并将其导入Core Data存储区。

此操作(字面意思是,ASIHTTPRequestNSOperation的子类)几乎完全是自包含的;我在后台线程上有一个自定义请求,使用流式JSON解析器将对象导入NSManagedObjectContext,当保存时,会触发我在内部捕获的通知并使用performSelectorOnMainThread:waitUntilDone:传递给主线程的上下文

我正在使用ASIHTTPRequest的块支持来完成此任务;在我的自定义initWithURL:方法中,我设置了相关的回调(dataReceivedBlockcompletionBlockfailureBlock等。但传统的委托模式(使用ASIHTTPRequestDelegate协议)也应该有用。

一个问题:你应该确保请求不会保留太多次,否则你最终会发生内存泄漏。使用多个线程时很容易错过,特别是在使用块时。而不是:

- (id)initWithURL:(NSURL *aURL) {
  //...
  [self setCompletionBlock:^{
    [self doSomething];
  }];
  //...
  return self;
}

在块中引用__weak时,使用__block属性(或self如果您使用ARC):

- (id)initWithURL:(NSURL *aURL) {
  //...
  __weak id blockSelf = self;
  [self setCompletionBlock:^{
    [blockSelf doSomething];
  }];
  //...
  return self;
}

如果您不知道为什么这很重要,请务必阅读Apple's guide to blocks in Objective-CASIHTTPRequest block API documentation