我有一個setter用於我想要輸入按照設置進行排序的類(它被稱爲不夠頻繁的成本是可以的),並且我想讓它快一點我想創建一個靜態的NSSortDescriptor來使用因爲排序參數總是相同的。NSSortDescriptor線程安全嗎?
setter的意思是原子,但我想知道是否可以在@synchronized塊之外的多個線程之間使用同一個NSSortDescriptor實例是安全的(因爲我在進入之前對輸入數組進行排序@synchronzied塊)。以下代碼線程安全嗎?或者這是否過早優化?
- (void) setMyArray:(NSArray*)newMyArray
{
static NSArray *sorter = nil;
@synchronized(self)
{
if (sorter == nil)
{
NSSortDescriptor *sortObj = [NSSortDescriptor sortDescriptorWithKey:@"size" ascending:YES];
sorter = [[NSArray arrayWithObject:sortObj] retain];
}
}
NSArray *sorted = [myNewArray sortedArrayUsingDescriptors:sorter];
@synchronized(self)
{
// set iVar from sorted array...
}
}
我知道不可變對象是線程安全的,但正如你在下面的迴應中指出的那樣,認爲某些東西是不可變的,因爲它看起來是不可變的,而且文檔沒有說它是不可改變的。在這種情況下,我還會在文檔上提出一個錯誤,以便向前推進。 – 2011-03-14 15:07:43
謝謝。應該明確地明確說明! – bbum 2011-03-14 20:44:33
歸檔雷達,bug ID 9131037。 – 2011-03-14 20:55:41