Это зависит от нескольких факторов: RDBMS, количества индексов, связанных с этими столбцами, но в целом это будет более эффективно с использованием ints, представленным bigints.
Любой прирост производительности зависит от использования, поэтому без конкретных примеров схемы таблицы и рабочей нагрузки запроса трудно сказать.
Если это не имеет смысла в домене (я думаю, что-то уникальное, например, номер социального страхования), суррогатный целочисленный ключ является хорошим выбором; ссылающиеся объекты не нуждаются в обновлении их FK-ссылки при изменении объекта-ссылки.
Вам необходимо использовать эту строку кода для решения вашей проблемы:
__block Person *aPerson = nil;
Для получения дополнительной информации, пожалуйста, обратитесь к этому руководству: Блоки и переменные
Просто используйте префикс __block
, чтобы объявить и назначить любой тип переменной внутри блока.
Например:
__block Person *aPerson = nil;
__block NSString *name = nil;
Просто напоминание об ошибке, которую я тоже совершил, объявление
__block
должно быть сделано при первом объявлении переменной, то есть ВНЕ блока, а не внутри него. Это должно решить проблемы, упомянутые в комментариях о том, что переменная не сохраняет свое значение за пределами блока.
Да, блок - это наиболее часто используемая функциональность, поэтому, чтобы избежать цикла сохранения, мы должны избегать использования сильной переменной, включая self внутри блока, несмотря на использование _weak или weakself.
Попробуйте __weak
, если вы получите какое-либо предупреждение относительно цикла сохранения, иначе используйте __block
Person *strongPerson = [Person new];
__weak Person *weakPerson = person;
Теперь вы можете ссылаться на объект weakPerson
внутри блока.
Чтобы назначить переменную внутри блока, которая вне блока всегда использует спецификатор __block перед этой переменной, ваш код должен выглядеть следующим образом: -
__block Person *aPerson = nil;
Когда я видел ту же ошибку, я пытался разрешить его как:
__block CGFloat docHeight = 0.0;
[self evaluateJavaScript:@"document.height" completionHandler:^(id height, NSError *error) {
//height
NSLog(@"=========>document.height:@%@",height);
docHeight = [height floatValue];
}];
и его хорошо работающий
Просто добавляют" __ блок " перед Переменной.