Jack Nutkins
Jack Nutkins

Reputation: 1555

Objective-C UImage imageWithData Problem

I'm having a problem displaying an image in an image view, which is generated from data.

My program works as follows:

  1. The user selects a row from a UITableView.
  2. Upon selection, a new view (Event Description) is generated and has 3 NSStrings and an NSData object passed to it.
  3. This data is displayed in the view, however a thread is also spawned to convert the NSData into an image and display it as without that there is a slight delay in displaying the description view.

This code works fine on the simulator, however when I run it on my iPhone and select a row, the first selection works fine, then all corresponding selections have a noticeable delay in displaying the image..

Here is my code:

    - (void)viewDidLoad {
    [super viewDidLoad];

    //Display the selected events data
    name.text = eventName;
    date.text = eventDate;
    description.text = eventDescription;

    //Set the title of the navigation bar
    self.navigationItem.title = eventName;

    /* Operation Queue init (autorelease) */
    NSOperationQueue *queue = [NSOperationQueue new];

    /* Create our NSInvocationOperation to call loadDataWithOperation, passing in nil */
    NSInvocationOperation *operation = [[NSInvocationOperation alloc] initWithTarget:self
                                                                            selector:@selector(loadDataWithOperation)
                                                                              object:nil];

    /* Add the operation to the queue */
    [queue addOperation:operation];
    [operation release];
}

//Threaded operation
- (void) loadDataWithOperation {
    //Set the event image
    UIImage *img = [UIImage imageWithData: eventImageURLData];

    image.image = img;
    }

Does anyone have any idea whats causing this?

Thanks,

Jack

Upvotes: 0

Views: 513

Answers (1)

Deepak Danduprolu
Deepak Danduprolu

Reputation: 44633

Simulator doesn't have memory constraints so it rarely flags the low memory problem. As such you're leaking NSOperationQueues. I see that you've marked it as autorelease but see no autorelease message. You should probably fix that. In addition to this, you should be sending the image update code to the main thread.

Upvotes: 2

Related Questions