Ios 我可以将相同的NSStrings用作@synchronized的一个符号吗
据我所知,相同的NSSTRING经过优化,在大多数(所有?)情况下,它们实际上是一个相同的对象 如果是,这是否意味着我可以使用NSString指针作为@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
- (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])。当然,您需要使用全局锁同步向共享字符串字典添加对象。