what if you try to convert the dictionary after you get it with the irregular keys?
the idea would be this, and yes, it is thread-safe:
NSDictionary *_dictionary = [NSDictionary dictionaryWithObjectsAndKeys:@"value", @"@ID", @"value2", @"@Name", nil];
NSMutableDictionary *_mutableDictionary = [NSMutableDictionary dictionary];
NSLock *_lock = [[NSLock alloc] init];
[_dictionary enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {
if ([_lock tryLock]) {
NSString *_newKey = [key stringByReplacingOccurrencesOfString:@"@" withString:@""];
[_mutableDictionary setValue:obj forKey:_newKey];
[_lock unlock];
}
}];
NSLog(@"ID : %@", [_mutableDictionary valueForKey:@"ID"]);
NSLog(@"Name : %@", [_mutableDictionary valueForKey:@"Name"]);