【发布时间】:2011-12-19 23:50:38
【问题描述】:
当我将NULL 或nil 传递到animateWithDuration:animations:completion: 的完成块时,iOS 不会对我大喊大叫,但这是否意味着没关系?还是开个空的^{ }比较好?
【问题讨论】:
标签: iphone objective-c ios ipad
当我将NULL 或nil 传递到animateWithDuration:animations:completion: 的完成块时,iOS 不会对我大喊大叫,但这是否意味着没关系?还是开个空的^{ }比较好?
【问题讨论】:
标签: iphone objective-c ios ipad
只要您可以相信您传递nil 的代码不会尝试将其作为块调用,就可以了。
快速演示:
typedef void (^GenericBlock)(void);
void useThisBlock(GenericBlock block){
block();
}
useThisBlock(^{NSLog(@"All okay.");});
useThisBlock(nil); // Compiles but crashes
内码必须先检查区块:if( block ) block();
如果是 UIKit 代码,应该没问题。
【讨论】:
传递nil 很好,在我看来会产生更清晰的代码。
如果您不想使用完成块,对于这种情况,您也可以使用[UIView animateWithDuration:animations:] 方法。
【讨论】:
nil,而不是NULL?
nil 和 NULL 是等价的。按照惯例,Objective-C 通常使用 nil,而 C 中使用 NULL。
nil 表示对象,必须在需要id 的地方使用,而NULL 表示非对象无效指针,必须在需要(void *) 的地方使用。请查看this 问题以获取更多信息。