调用[NSThread detachNewThreadSelector ...]会阻止UIImageView setImage工作

时间:2012-01-30 13:26:50

标签: objective-c xcode

我发生了一件奇怪的事情,我不明白。 如果我运行该方法     [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进行了正确的命名测试,但图像仍未改变。

提前致谢。 布雷特

2 个答案:

答案 0 :(得分:0)

大多数UIKit都不是线程安全的,所以你必须将图像分配给主线程上的imageview(然而,加载仍然可以在后台线程中完成)。

答案 1 :(得分:0)

UIKit只是在主线程中工作。尝试将图像作为NSData加载到线程中,然后将NSData传递给主线程以用作UIImage