Не предполагая, что это лучший способ для генерации замков, которые вы ищете, но вот небольшой взлом, чтобы дать вам нужный эффект:
NSString *stringA = [NSString stringWithString:@"Hello"];
NSString *stringB = [NSString stringWithFormat:@"%@l%@",@"Hel",@"o"];
NSString *stringC = [NSString stringWithFormat:@"Hell%@", @"o"];
NSLog(@"%p / %p / %p", stringA, stringB, stringC);
NSNumber *lockA = [NSNumber numberWithUnsignedInteger:stringA.hash];
NSNumber *lockB = [NSNumber numberWithUnsignedInteger:stringB.hash];
NSNumber *lockC = [NSNumber numberWithUnsignedInteger:stringC.hash];
NSLog(@"%p / %p / %p", lockA, lockB, lockC);
Вы заметите, что, хотя строки имеютразные адреса, их соответствующие номера NSN нет.Это связано с тем, что номера NSN для данного числа являются одиночными.
Теперь вы можете использовать @synchronize()
для этих "блокирующих" объектов.
- Правка -
Фактто, что номера NSN являются единичными для заданного значения, является внутренней деталью реализации, что является одной из причин, по которым может быть хорошей идеей поиск реального механизма блокировки, такого как словарь, индексированный, например, NSString.