Created
July 20, 2009 17:03
-
-
Save pokeb/150447 to your computer and use it in GitHub Desktop.
An example showing how to manage a queue with ASIHTTPRequest
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// | |
// MyController.h | |
// | |
// Created by Ben Copsey on 20/07/2009. | |
// Copyright 2009 All-Seeing Interactive. All rights reserved. | |
// | |
#import <Foundation/Foundation.h> | |
#import <GHUnit/GHUnit.h> | |
@class ASINetworkQueue; | |
@interface MyController : NSObject { | |
ASINetworkQueue *networkQueue; | |
} | |
- (void)doNetworkOperations; | |
@property (retain) ASINetworkQueue *networkQueue; | |
@end | |
------------------------------------------------------------------- | |
// | |
// MyController.m | |
// | |
// Created by Ben Copsey on 20/07/2009. | |
// Copyright 2009 All-Seeing Interactive. All rights reserved. | |
// | |
#import "MyController.h" | |
#import "ASIHTTPRequest.h" | |
#import "ASINetworkQueue.h" | |
@implementation MyController | |
- (void)dealloc | |
{ | |
[networkQueue release]; | |
[super dealloc]; | |
} | |
- (void)doNetworkOperations | |
{ | |
// Stop anything already in the queue before removing it | |
[[self networkQueue] cancelAllOperations]; | |
// Creating a new queue each time we use it means we don't have to worry about clearing delegates or resetting progress tracking | |
[self setNetworkQueue:[ASINetworkQueue queue]]; | |
[[self networkQueue] setDelegate:self]; | |
[[self networkQueue] setRequestDidFinishSelector:@selector(requestFinished:)]; | |
[[self networkQueue] setRequestDidFailSelector:@selector(requestFailed:)]; | |
[[self networkQueue] setQueueDidFinishSelector:@selector(queueFinished:)]; | |
int i; | |
for (i=0; i<5; i++) { | |
ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:[NSURL URLWithString:@"http://allseeing-i.com"]]; | |
[[self networkQueue] addOperation:request]; | |
} | |
[[self networkQueue] go]; | |
} | |
- (void)requestFinished:(ASIHTTPRequest *)request | |
{ | |
// You could release the queue here if you wanted | |
if ([[self networkQueue] requestsCount] == 0) { | |
// Since this is a retained property, setting it to nil will release it | |
// This is the safest way to handle releasing things - most of the time you only ever need to release in your accessors | |
// And if you an Objective-C 2.0 property for the queue (as in this example) the accessor is generated automatically for you | |
[self setNetworkQueue:nil]; | |
} | |
//... Handle success | |
NSLog(@"Request finished"); | |
} | |
- (void)requestFailed:(ASIHTTPRequest *)request | |
{ | |
// You could release the queue here if you wanted | |
if ([[self networkQueue] requestsCount] == 0) { | |
[self setNetworkQueue:nil]; | |
} | |
//... Handle failure | |
NSLog(@"Request failed"); | |
} | |
- (void)queueFinished:(ASINetworkQueue *)queue | |
{ | |
// You could release the queue here if you wanted | |
if ([[self networkQueue] requestsCount] == 0) { | |
[self setNetworkQueue:nil]; | |
} | |
NSLog(@"Queue finished"); | |
} | |
@synthesize networkQueue; | |
@end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
In fact, it is no need to call go, operation will start automatically after adding to the queue.