调用 [NSThread detachNewThreadSelector...] 使 UIImageView setImage 停止工作
Posted
技术标签:
【中文标题】调用 [NSThread detachNewThreadSelector...] 使 UIImageView setImage 停止工作【英文标题】:calling [NSThread detachNewThreadSelector...] stops UIImageView setImage from working 【发布时间】:2012-01-30 13:26:50 【问题描述】:我不明白发生了一件奇怪的事情。 如果我运行该方法 [self setImage:[UIImage imageNamed:@"Loader20.png"]] 例如。 它在线程选择器方法之外工作正常, 但它不会在选择器方法本身中起作用,它什么也不做。 这是我的做法。
- (id)init
self = [super init];
if (self)
//[self setImage:[UIImage imageNamed:@"Loader20.png"]];
[NSThread detachNewThreadSelector:@selector(showLoadingImage) toTarget:self withObject:nil];
return self;
-(void)showLoadingImage
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
int i = 0;
int imageIncrement= 1;
bool run = true;
while (run)
[NSThread sleepForTimeInterval:1];
if(imageIncrement == 48)
imageIncrement=1;
i++;
else
imageIncrement++;
NSString *imageString = [NSString stringWithFormat:@"%@%d%@", @"Loader", imageIncrement, @".png"];
NSLog(imageString);
[self setImage:[UIImage imageNamed:imageString]];
if (i == 2)
run = false;
[NSThread exit];
[pool release];
谁能给我一些指导,我确保我想要循环的所有图像都正确命名为使用 NSlog 进行测试,但图像仍然没有改变。
提前致谢。 布雷特
【问题讨论】:
【参考方案1】:UIKit
的大部分内容都不是线程安全的,因此您必须将图像分配给主线程上的图像视图(不过,加载仍然可以在后台线程中完成)。
【讨论】:
【参考方案2】:UIKit 只在主线程中工作。尝试在线程中将图像加载为NSData
,然后将NSData
传递给主线程以用作UIImage
。
【讨论】:
以上是关于调用 [NSThread detachNewThreadSelector...] 使 UIImageView setImage 停止工作的主要内容,如果未能解决你的问题,请参考以下文章
调用 [NSThread detachNewThreadSelector...] 使 UIImageView setImage 停止工作