如何创建一个只包含它自己的委托的新文件,以便我可以创建一个具有自己的异步结束的 ASIHTTPRequest,以及一些足够简单的东西,我只需要设置[request setDelegate:self];
为类似的东西[request setDelegate:AlternateDelegate];
,只需在文档的开头添加一个包含引用 AlternateDelegate 委托
2 回答
ASIHTTPRequest 的委托只是一个标准的目标 C 对象。只需创建一个新类,包含它的标题,创建/获取对象并将委托设置为该对象。
你试过这个并遇到问题吗?如果是这样,问题是什么?
我知道这个问题很老,但万一有人遇到它:
@Hankweb 似乎在谈论使用请求作为自己的代表。当然,这在某些情况下是有效的。例如,我正在开发一个项目,该项目用于ASIHTTPRequest
从远程源获取 JSON 并将其导入核心数据存储。
这个操作(字面意思ASIHTTPRequest
是 的子类NSOperation
)几乎是完全独立的;我在后台线程上有一个自定义请求,使用流式 JSON 解析器将对象导入到 aNSManagedObjectContext
中,保存时会触发我在内部捕获并使用performSelectorOnMainThread:waitUntilDone:
.
我正在使用ASIHTTPRequest
' 块支持来完成此操作;在我的自定义initWithURL:
方法中,我设置了相关的回调(、、、dataReceivedBlock
等completionBlock
)failureBlock
。不过,传统的委托模式(使用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 文档。