Objective c 调用[NSThread detachNewThreadSelector…]会停止UIImageView setImage的工作
我发生了一件奇怪的事,我不明白。 如果我运行这个方法 [self-setImage:[UIImage ImageName:@“Loader20.png”]]eg。 它在线程选择器方法之外工作良好, 但是它在选择器方法本身中不起作用,它什么也不做。 我是这样做的Objective c 调用[NSThread detachNewThreadSelector…]会停止UIImageView setImage的工作,objective-c,xcode,Objective C,Xcode,我发生了一件奇怪的事,我不明白。 如果我运行这个方法 [self-setImage:[UIImage ImageName:@“Loader20.png”]]eg。 它在线程选择器方法之外工作良好, 但是它在选择器方法本身中不起作用,它什么也不做。 我是这样做的 - (id)init { self = [super init]; if (self) { //[self setImage:[UIImage imageNamed:@"Loader20.png"]]; [NSThrea
- (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];
}
有人能给我一些指导吗?我确保所有我想循环的图像都正确命名为testing with NSlog,但图像仍然没有改变
提前谢谢。
Brett大多数
UIKit
都不是线程安全的,因此必须将图像分配给主线程上的imageview(不过,加载仍可以在后台线程中完成)。UIKit只在主线程中工作。尝试将映像作为NSData
加载到线程中,然后将NSData
传递到主线程以用作UIImage