【发布时间】:2011-02-10 17:43:21
【问题描述】:
从我的主线程中,我启动了一个图像加载器方法 method-A(如下)。问题是,如果在进行新的 method-A 调用时 method-A 未完成,则图像加载将从头开始。
我想要做的是,取消任何 new method-A 调用,而 previous method-A 调用仍在工作......我(尝试)现在这样做的方式是使用一个简单的全局 BOOL 变量 (BOOL imageLoaderBusy) 并使用它来跟踪 method-A 是否还在工作(如下图)。
问题是,该变量有时似乎被忽略了,并且新的 method-A 调用不受欢迎地开始了......我不知道。也许您需要一种特殊的方式来创建全局变量以使它们在多个线程中可访问/有效?
谁能告诉我我做错了什么?谢谢。
//Method-A called like this:
[self performSelectorInBackground:@selector(loadPagesWithGraphics:) withObject:nil];
//Method-A
-(IBAction)loadPagesWithGraphics:(id)sender{
NSAutoreleasePool *arPool = [[NSAutoreleasePool alloc] init];
if(!imageLoaderBusy){
imageLoaderBusy = YES;
// Load Images
}
imageLoaderBusy = NO;
[arPool release];
}
提前致谢。
【问题讨论】:
-
请注意,您的变量不应是全局变量。它应该是一个实例变量,因为您的方法是一个实例方法,并且图像加载可能是指由实例存储/引用的图像。
-
@Bavarious 感谢您提供此信息,因为我仍然对变量和多线程的确切机制缺乏清晰的了解。
标签: iphone objective-c multithreading xcode ios