Присвойте переменную внутри блока переменной за пределами блока

Это зависит от нескольких факторов: RDBMS, количества индексов, связанных с этими столбцами, но в целом это будет более эффективно с использованием ints, представленным bigints.

Любой прирост производительности зависит от использования, поэтому без конкретных примеров схемы таблицы и рабочей нагрузки запроса трудно сказать.

Если это не имеет смысла в домене (я думаю, что-то уникальное, например, номер социального страхования), суррогатный целочисленный ключ является хорошим выбором; ссылающиеся объекты не нуждаются в обновлении их FK-ссылки при изменении объекта-ссылки.

372
задан John Topley 15 December 2015 в 20:40
поделиться

8 ответов

Вам необходимо использовать эту строку кода для решения вашей проблемы:

__block Person *aPerson = nil;

Для получения дополнительной информации, пожалуйста, обратитесь к этому руководству: Блоки и переменные

756
ответ дан Cœur 15 December 2015 в 20:40
поделиться

Просто используйте префикс __block, чтобы объявить и назначить любой тип переменной внутри блока.

Например:

__block Person *aPerson = nil;

__block NSString *name = nil;
17
ответ дан Luke 15 December 2015 в 20:40
поделиться

Просто напоминание об ошибке, которую я тоже совершил, объявление

 __block

должно быть сделано при первом объявлении переменной, то есть ВНЕ блока, а не внутри него. Это должно решить проблемы, упомянутые в комментариях о том, что переменная не сохраняет свое значение за пределами блока.

38
ответ дан Denis Balko 15 December 2015 в 20:40
поделиться
__block Person *aPerson = nil;
10
ответ дан Luke 15 December 2015 в 20:40
поделиться

Да, блок - это наиболее часто используемая функциональность, поэтому, чтобы избежать цикла сохранения, мы должны избегать использования сильной переменной, включая self внутри блока, несмотря на использование _weak или weakself.

3
ответ дан user6311313 15 December 2015 в 20:40
поделиться

Попробуйте __weak, если вы получите какое-либо предупреждение относительно цикла сохранения, иначе используйте __block

Person *strongPerson = [Person new];
__weak Person *weakPerson = person;

Теперь вы можете ссылаться на объект weakPerson внутри блока.

3
ответ дан Pebby 15 December 2015 в 20:40
поделиться

Чтобы назначить переменную внутри блока, которая вне блока всегда использует спецификатор __block перед этой переменной, ваш код должен выглядеть следующим образом: -

__block Person *aPerson = nil;
10
ответ дан Luke 15 December 2015 в 20:40
поделиться

Когда я видел ту же ошибку, я пытался разрешить его как:

   __block CGFloat docHeight = 0.0;


    [self evaluateJavaScript:@"document.height" completionHandler:^(id height, NSError *error) {
        //height
        NSLog(@"=========>document.height:@%@",height);
        docHeight = [height floatValue];
    }];

и его хорошо работающий

Просто добавляют" __ блок " перед Переменной.

0
ответ дан 22 November 2019 в 23:59
поделиться