据我所知,相同的NSStrings以这样的方式进行优化,即在大多数(全部?)情况下它们实际上是同一个对象。
如果是,这是否意味着我可以使用NSString指针作为@synchronized指令的信号量,并且只要使用与信号量相同的字符串执行代码块就阻塞它?
- (void)doSomethingWithAString:(NSString *)myString
{
@synchronized(myString) {
//Something time intensive that never happens in parallel for the exact same myString
}
}
答案 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) {
...