如何创建一个包含它自己的委托的新文件,以便我可以使用自己的异步结尾创建ASIHTTPRequest,并且只需要将[request setDelegate:self];
设置为[request setDelegate:AlternateDelegate];
之类的内容就足够了并且只需在文档的开头添加一个include来引用AlternateDelegate委托
答案 0 :(得分:1)
ASIHTTPRequest的委托只是一个标准的目标C对象。只需创建一个新类,包含它的标题,创建/获取对象并将委托设置为该对象。
你试过这个并遇到问题吗?如果是这样,问题是什么?
答案 1 :(得分:1)
我知道这个问题已经过时了,但万一有人碰到它:
@Hankweb似乎在谈论将请求用作自己的委托。当然有可能出现这种情况。例如,我正在开发一个项目,该项目使用ASIHTTPRequest
从远程源获取JSON并将其导入Core Data存储区。
此操作(字面意思是,ASIHTTPRequest
是NSOperation
的子类)几乎完全是自包含的;我在后台线程上有一个自定义请求,使用流式JSON解析器将对象导入NSManagedObjectContext
,当保存时,会触发我在内部捕获的通知并使用performSelectorOnMainThread:waitUntilDone:
传递给主线程的上下文
我正在使用ASIHTTPRequest
的块支持来完成此任务;在我的自定义initWithURL:
方法中,我设置了相关的回调(dataReceivedBlock
,completionBlock
,failureBlock
等。但传统的委托模式(使用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-C和ASIHTTPRequest block API documentation。