Skip to content

Instantly share code, notes, and snippets.

@pokeb
Created July 20, 2009 17:03
Show Gist options
  • Star 29 You must be signed in to star a gist
  • Fork 22 You must be signed in to fork a gist
  • Save pokeb/150447 to your computer and use it in GitHub Desktop.
Save pokeb/150447 to your computer and use it in GitHub Desktop.
An example showing how to manage a queue with ASIHTTPRequest
//
// 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
@scruff311
Copy link

How would one add a custom accurate progress indicator to this code? I have gone through the docs but cannot figure it out.

@Zeokat
Copy link

Zeokat commented Mar 5, 2014

Zeokat thanks for the code i go to play with this.

@KevinJue
Copy link

did you tried to do the same work with AFNetworking ?

@neufeng
Copy link

neufeng commented Aug 28, 2014

In fact, it is no need to call go, operation will start automatically after adding to the queue.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment