Is it okay to pass in NULL to a block parameter?

后端 未结 2 1241
难免孤独
难免孤独 2021-01-17 11:41

iOS does not scream at me when I pass in NULL or nil to the completion block in animateWithDuration:animations:completion: but does th

2条回答
  •  执笔经年
    2021-01-17 12:00

    This is okay as long as you can trust that the code to which you are passing the nil won't try to call it as a block.

    A quick demonstration:

    typedef void (^GenericBlock)(void);
    
    void useThisBlock(GenericBlock block){
        block();
    }
    
    useThisBlock(^{NSLog(@"All okay.");});
    useThisBlock(nil);    // Compiles but crashes
    

    The inner code must check the block first: if( block ) block();

    In the case of UIKit code, you should be fine.

提交回复
热议问题