我可以使用相同的NSStrings作为@synchronized的一个sempahore

时间:2013-05-17 13:42:31

标签: ios nsstring semaphore

据我所知,相同的NSStrings以这样的方式进行优化,即在大多数(全部?)情况下它们实际上是同一个对象。

如果是,这是否意味着我可以使用NSString指针作为@synchronized指令的信号量,并且只要使用与信号量相同的字符串执行代码块就阻塞它?

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

1 个答案:

答案 0 :(得分: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) {
    ...