我正在嘗試製作測量線程性能的測試應用程序。但是,我試圖設置一個圖像到一個線程imageview,它不更新。實際上,setImage1和setImage2方法甚至沒有被調用。有任何想法嗎? 看看在細節NSThread上未更新圖像視圖
#import "UntitledAppDelegate.h"
#import <QuartzCore/QuartzCore.h>
@implementation UntitledAppDelegate
@synthesize window, imageView1, imageView2, label1, label2, label0;
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
[window makeKeyAndVisible];
return YES;
}
-(IBAction) startSeparate:(id) sender
{
imageView1.image = imageView2.image = nil;
double prev;
start = prev = CACurrentMediaTime();
[self setImage1];
label1.text = [NSString stringWithFormat:@"%.10g", CACurrentMediaTime() - prev];
prev = CACurrentMediaTime();
[self setImage2];
label2.text = [NSString stringWithFormat:@"%.10g", CACurrentMediaTime() - prev];
}
-(IBAction) startThreaded:(id) sender
{
imageView1.image = imageView2.image = nil;
double prev;
NSThread *t1 = [[NSThread alloc] init];
[t1 start];
NSThread *t2 = [[NSThread alloc] init];
[t2 start];
start = prev = CACurrentMediaTime();
//This doesn't work
//[self performSelector:@selector(setImage1) onThread:t1 withObject:nil waitUntilDone:NO];
//But this does
[self performSelectorInBackground:@selector(setImage1) withObject:nil];
label1.text = [NSString stringWithFormat:@"%.10g", CACurrentMediaTime() - prev];
prev = CACurrentMediaTime();
//This doesn't work
//[self performSelector:@selector(setImage2) onThread:t2 withObject:nil waitUntilDone:NO];
//But this does
[self performSelectorInBackground:@selector(setImage2) withObject:nil];
label2.text = [NSString stringWithFormat:@"%.10g", CACurrentMediaTime() - prev];
}
-(void) setImage1
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
UIImage *image1 = [UIImage imageNamed:@"bird.png"];
imageView1.image = image1;
[self pictureDone];
[pool drain];
}
-(void) setImage2
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
UIImage *image2 = [UIImage imageNamed:@"bird.png"];
imageView2.image = image2;
[self pictureDone];
[pool drain];
}
-(void) pictureDone
{
done++;
NSLog(@"%i", done);
if (done == 2) {
label0.text = [NSString stringWithFormat:@"%.10g", CACurrentMediaTime() - start];
done = 0;
}
}
@end
你確定沒有調用setImage1和setImage2嗎?如果你添加一個NSLog它打印過嗎? – 2010-11-05 17:49:42
100%肯定。設置斷點。 – tadejsv 2010-11-05 17:58:50