更好的方法来确保传递的参数或变量的有效性

时间:2017-09-26 07:07:40

标签: ios objective-c optimization

我见过许多代码,其中一个突出的问题是检查传递的参数的有效性。对于例如

1)如果传入的string参数实际上是有效的string

 + (BOOL)isEmptyString:(NSString *) string {
      if (!string || ![string isKindOfClass:[NSString class]]) return YES;
      NSString *_string = [string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
      return (!_string.length || [_string isEqualToString:@"null"]); 
 }

2)或参数确实是dictionary等。

这导致在代码中的许多地方检查有效性。什么是预防它的最佳方法?并确保stringdictionary通过实际上是正确的?

1 个答案:

答案 0 :(得分:0)

我不确定只有一种正确的方法可以做到这一点。

在我的项目中,我将威胁警告设为错误'在目标设置中并设置-Wall -Weverything -Wno-objc-missing-property-synthesis -Wno-gnu -Wno-c++98-compat -Wno-assign-enum警告标志。

这个偏执狂'模式不允许开发人员将错误类型的数据传递给方法。

第二件事是断言。 所以在你的情况下,我会做这样的事情:

+ (BOOL)isEmptyString:(NSString *) string {
    NSParameterAssert([string isKindOfClass:[NSString class]];
    ...
}

因此,在开发过程中,我会看到出现问题。

最后一个。如果您认为在Release构建方法中可能得到错误的数据类型,那么您仍然需要进行检查:

if (![string isKindOfClass:[NSString class]]) {
    //Log an error
    //Decide what do in this case. (Send log, Show error message to user, throw exception ...
}