调用 [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 停止工作

NSThread

使用 NSThread 时出错

什么时候释放 NSThread 是安全的?

NSThread的main方法内部做了什么?

在 iOS 上停止 NSThread