我有一個很很少發生的錯誤,其中一個NSMutableDictionary
實例中的鍵最終指向錯誤的對象(同一字典中的另一個對象)。NSMutableDictionary不是線程安全的:那麼?
「關鍵混淆」是否是競爭條件的結果?
下面的代碼(我已經把新的線程安全性,因爲):
- (NSNumber*) makeHashFromResizedImage:(UIImage*)original newSize:(CGSize)newSize {
int retVal = original.hash + newSize.width * 2 + newSize.height * 4;
return [NSNumber numberWithInteger:retVal];
}
- (UIImage *)resizeImage:(UIImage*)image newSize:(CGSize)newSize {
NSNumber *key = [self makeHashFromResizedImage:image newSize:newSize];
if ([self.resizedImages objectForKey:key]) {
return [self.resizedImages objectForKey:key];
}
UIImage *newImage = {{image-resizing-code-here}};
[self.resizedImages setObject:newImage forKey:key];
return newImage;
}
注意:{{image-resizing-code-here}}
是爲簡潔,刪除。我開始懷疑我的makeHashFromResizedImage
,因爲它可能無法按預期工作。去單位現在測試它。
請顯示您的代碼。 (是的,[NSDictionary是不是線程安全的](http://stackoverflow.com/questions/1986736/nsmutabledictionary-thread-safety)。) – kennytm 2012-01-17 18:04:51
@KennyTM我想說我的代碼是不相關的,但肯定這是相關的,我可能看錯了。例如,我的'makeHashFromResizedImage'看起來也可能有float-and-int問題。代碼已發佈。 – 2012-01-17 19:05:20
如果你擔心使NSDictionary線程安全,看看這個問題[這裏](http://stackoverflow.com/questions/8763028/how-can-i-make-every-message-an-object-receives-thread - 安全) – 2012-01-17 19:14:21