Goal C: How to free delegates in this situation

I use custom delegate objects to perform some cleanup tasks after the request completes. ASIHTTPRequest does not save delegates, so I cannot auto-update them. Right now I am posting and releasing delegates.

Application Member

MyDelegate *delegate = [[MyDelegate alloc] init];   
ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
[request setDelegate:delegate];

Mydelegate.m

- (void)requestFinished:(ASIHTTPRequest *)request
{
    [self release];
}

- (void)requestFailed:(ASIHTTPRequest *)request
{
    [self release];
}

Is there a better way to do this? Outstanding delegates seem ugly, and the build and analysis of Xcode feels uncomfortable with what I'm doing.

+5
source share
3 answers

delgates ( ):

@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
+4

, ? , . , ASIHTTPRequest, , , ASIHTTPRequest ( ASIHTTPRequest, ).

+4

"controller" , asihhtprequest. , - managesItsOwnLifetime (BOOL), YES [self retain]...

0

All Articles