0

如何创建一个只包含它自己的委托的新文件,以便我可以创建一个具有自己的异步结束的 ASIHTTPRequest,以及一些足够简单的东西,我只需要设置[request setDelegate:self];为类似的东西[request setDelegate:AlternateDelegate];,只需在文档的开头添加一个包含引用 AlternateDelegate 委托

4

2 回答 2

1

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

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

于 2010-08-20T09:56:52.820 回答
1

我知道这个问题很老,但万一有人遇到它:

@Hankweb 似乎在谈论使用请求作为自己的代表。当然,这在某些情况下是有效的。例如,我正在开发一个项目,该项目用于ASIHTTPRequest从远程源获取 JSON 并将其导入核心数据存储。

这个操作(字面意思ASIHTTPRequest是 的子类NSOperation)几乎是完全独立的;我在后台线程上有一个自定义请求,使用流式 JSON 解析器将对象导入到 aNSManagedObjectContext中,保存时会触发我在内部捕获并使用performSelectorOnMainThread:waitUntilDone:.

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

一个问题:你应该确保请求不会保留太多次,否则你最终会出现内存泄漏。这在使用多个线程时很容易被忽略,尤其是在使用块时。代替:

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

在块内引用时使用__weak属性(或者__block如果您使用 ARC)self

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

如果您不知道为什么这很重要,请务必阅读Apple 的 Objective-C 块指南ASIHTTPRequest 块 API 文档

于 2011-03-14T21:09:12.223 回答