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:
- The user selects a row from a UITableView.
- Upon selection, a new view (Event Description) is generated and has 3 NSStrings and an NSData object passed to it.
- 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;开发者_StackOverflow社区
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
Simulator doesn't have memory constraints so it rarely flags the low memory problem. As such you're leaking NSOperationQueue
s. 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.
精彩评论