Dav*_*vid 5 delegates release objective-c autorelease asihttprequest
我在请求完成后使用自定义委托对象来执行一些清理任务.ASIHTTPRequest不保留代理,因此我无法自动发布它们.现在,这就是我分配和释放代表的方式.
MyDelegate *delegate = [[MyDelegate alloc] init];
ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
[request setDelegate:delegate];
Run Code Online (Sandbox Code Playgroud)
- (void)requestFinished:(ASIHTTPRequest *)request
{
[self release];
}
- (void)requestFailed:(ASIHTTPRequest *)request
{
[self release];
}
Run Code Online (Sandbox Code Playgroud)
有一个更好的方法吗?让代表们发布自己看起来很难看,Xcode的构建和分析让我感到不舒服.
一种简单的方法是为主控制器(在本例中为应用程序委托)中的每个活动请求维护一组可变委托:
@interface MyAppController
{
NSMutableSet * activeDelegates;
}
@end
@implementation MyAppController
- (id)init
{
if ((self = [super init]) == nil) { return nil; }
activeDelegates = [[NSMutableSet alloc] initWithCapacity:0];
return self;
}
- (void)dealloc
{
[activeDelegates release];
}
- (void)createRequest
{
MyDelegate *delegate = [[MyDelegate alloc] init];
[activeDelegates addObject:delegate];
[delegate release];
ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
[request setDelegate:self];
...
}
- (void)requestFinished:(ASIHTTPRequest *)request
{
MyDelegate *delegate = [request delegate];
[delegate doSomething];
[activeDelegates removeObject:delegate];
{
- (void)requestFailed:(ASIHTTPRequest *)request
{
[activeDelegates removeObject:[request delegate]];
}
@end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1634 次 |
| 最近记录: |