通过OperationQueue加载UIImageView的问题
我使用 NSOperationQueue 加载 UIImageView。
负载从 Internet 获取图像,然后将其添加到图像视图。我遇到的问题是该方法完成,但图像视图需要大约 3 秒后才能实际显示图像或从超级视图中删除图像视图...
- (void)viewDidLoad { NSLog(@"AirportDetailView: viewDidLoad");
[super viewDidLoad];
[self.activity startAnimating];
self.queue = [NSOperationQueue new];
NSInvocationOperation *operation = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(loadImage) object:NULL];
[self.queue addOperation:operation];
[operation release];
}
-(void)loadImage {
[myAp ImageForAp];
NSLog(@"ImageFor Ap Ended, %@",myAp.ApDiagram);
[self.activity stopAnimating];
if (myAp.ApDiagram==NULL) {
NSLog(@"Finally Gets Here");
[self.Diagram removeFromSuperview];
}
else {
NSLog(@"Finally Gets Here with Diag");
[self.Diagram setBackgroundImage:myAp.ApDiagram forState:UIControlStateNormal];
}
}
NSLOG 显示前两个日志语句之间的延迟约为3秒不明白为什么......
用我的最新代码更新......
-(void)loadImage {
[myAp ImageForAp];
NSLog(@"ImageFor Ap Ended, %@",myAp.ApDiagram);
[self performSelectorOnMainThread:@selector(UpdateUI) withObject:nil waitUntilDone:NO];
}
-(void)UpdateUI {
[self.activity stopAnimating];
if (myAp.ApDiagram==NULL) {
NSLog(@"Finally Gets Here");
[self.Diagram removeFromSuperview];
}
else {
NSLog(@"Finally Gets Here with Diag");
[self.Diagram setBackgroundImage:myAp.ApDiagram forState:UIControlStateNormal];
}
}
I load a UIImageView using an NSOperationQueue.
The load fetches an image from the Internet and then adds it to an image view. The problem I have is that the method finishes but it takes about 3 seconds later for the image view to actually either show the image or remove the image view from the superview...
- (void)viewDidLoad { NSLog(@"AirportDetailView: viewDidLoad");
[super viewDidLoad];
[self.activity startAnimating];
self.queue = [NSOperationQueue new];
NSInvocationOperation *operation = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(loadImage) object:NULL];
[self.queue addOperation:operation];
[operation release];
}
-(void)loadImage {
[myAp ImageForAp];
NSLog(@"ImageFor Ap Ended, %@",myAp.ApDiagram);
[self.activity stopAnimating];
if (myAp.ApDiagram==NULL) {
NSLog(@"Finally Gets Here");
[self.Diagram removeFromSuperview];
}
else {
NSLog(@"Finally Gets Here with Diag");
[self.Diagram setBackgroundImage:myAp.ApDiagram forState:UIControlStateNormal];
}
}
The NSLOG shows a delay between the first two log statements of about 3 seconds can't understand why....
Updated with my Latest Code......
-(void)loadImage {
[myAp ImageForAp];
NSLog(@"ImageFor Ap Ended, %@",myAp.ApDiagram);
[self performSelectorOnMainThread:@selector(UpdateUI) withObject:nil waitUntilDone:NO];
}
-(void)UpdateUI {
[self.activity stopAnimating];
if (myAp.ApDiagram==NULL) {
NSLog(@"Finally Gets Here");
[self.Diagram removeFromSuperview];
}
else {
NSLog(@"Finally Gets Here with Diag");
[self.Diagram setBackgroundImage:myAp.ApDiagram forState:UIControlStateNormal];
}
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
确保
loadImage
方法正在主线程上运行。所有 UI 操作都需要在主线程上进行才能按预期工作。您的代码需要与此类似。viewDidLoad 内部也可能存在内存泄漏。
self.queue = [NSOperationQueue new];
应更改为self.queue = [[[NSOperationQueue alloc] init] autorelease];
Make sure that the
loadImage
method is being run on the main thread. All UI operations need to happen on the main thread to work as expected. Your code will need to look similar to this.There is also a possible memory leak inside of viewDidLoad.
self.queue = [NSOperationQueue new];
should be changed toself.queue = [[[NSOperationQueue alloc] init] autorelease];