2013-05-17 23 views
0

據我所知,相同的NSStrings被優化,使得它們在大多數(全部?)情況下實際上是同一個對象。我是否可以使用相同的NSStrings作爲@synchronized的一個sempahore

如果是的話,這是否意味着我可以使用NSString指針作爲@synchronized指令的信號量,並且在代碼塊以相同的字符串作爲信號量執行時阻止它?

- (void)doSomethingWithAString:(NSString *)myString 
{ 
    @synchronized(myString) { 
     //Something time intensive that never happens in parallel for the exact same myString 
    } 
} 

回答

1

沒有,用相同的字符串字面NSString情況下,不再保證是相同的實例在同一地址。這是一段時間以前發生的變化。

您可以使用全局字符串:

在file.h

extern NSString *const MY_SYNC_STRING; 

在file.m

NSString *MY_SYNC_STRING = @"MYSyncString"; 

在otherFile.m

#import "file.h" 
    ... 
    @synchronized(MY_SYNC_STRING) { 
    ... 
+0

確定。任何其他想法如何我可以實現一個字符串內容相關鎖? – Stefan

+0

好的謝謝。但是,全局字符串並不能真正解決問題。 – Stefan

+0

您可以添加一個將字符串名稱作爲鍵的字典對象緩存的方法。你會叫@synchronized([myClass getSharedObject:myString])。當然,您需要使用全局鎖定將添加對象添加到該字符串的共享字典中。 –

相關問題