iOS не кричит на меня, когда я передаю NULL
или nil
в блок завершения в animateWithDuration:animations:completion:
, но означает ли это, что все в порядке? Или лучше открыть пустой ^{ }
?
Можно ли передать в NULL параметр блока?
Ответ 1
Это нормально, если вы можете доверять тому, что код, которому вы передаете nil
, не будет пытаться вызвать его как блок.
Быстрая демонстрация:
typedef void (^GenericBlock)(void);
void useThisBlock(GenericBlock block){
block();
}
useThisBlock(^{NSLog(@"All okay.");});
useThisBlock(nil); // Compiles but crashes
Внутренний код должен сначала проверить блок: if( block ) block();
В случае кода UIKit вы должны быть в порядке.
Ответ 2
Передача nil
в порядке, и, на мой взгляд, дает более чистый код чтения.
Если вы не хотите использовать блок завершения, для этого случая вы также можете использовать метод [UIView animateWithDuration:animations:]
.