Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 我可以将相同的NSStrings用作@synchronized的一个符号吗_Ios_Nsstring_Semaphore - Fatal编程技术网

Ios 我可以将相同的NSStrings用作@synchronized的一个符号吗

Ios 我可以将相同的NSStrings用作@synchronized的一个符号吗,ios,nsstring,semaphore,Ios,Nsstring,Semaphore,据我所知,相同的NSSTRING经过优化,在大多数(所有?)情况下,它们实际上是一个相同的对象 如果是,这是否意味着我可以使用NSString指针作为@synchronized指令的信号量,并在代码块以与信号量相同的字符串执行时将其阻塞 - (void)doSomethingWithAString:(NSString *)myString { @synchronized(myString) { //Something time intensive that never h

据我所知,相同的NSSTRING经过优化,在大多数(所有?)情况下,它们实际上是一个相同的对象

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

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

不,具有相同字符串的literal
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) {
    ...

好啊还有什么其他想法可以实现一个字符串内容相关锁吗?好的,谢谢。不过,全局字符串并不能真正解决问题。您可以添加一个方法,在字典中以字符串名称作为键缓存字符串对象。您可以调用@synchronized([myClass getSharedObject:myString])。当然,您需要使用全局锁同步向共享字符串字典添加对象。