两者有什么区别

What is difference btw the two

通常当我想要用逗号分隔的字符串数据数组时,我会这样做:

 NSArray *array1 =  [obj1 componentsSeparatedByString:@","];

但是一些程序员这样做了:

 NSArray <NSString *>*array1 = [obj1 componentsSeparatedByString:@","];

两者都有效,但我想知道哪个更好,为什么。

后一种语法是"lightweight generic"。这意味着当你处理这个集合时,它知道你正在处理 NSString * 个对象的集合。所以它知道 array1[0] 必须是 NSString.

通过这样做,如果您不小心使用了不是 NSString 方法的方法,您可能会收到编译器警告。您还享受更好的代码完成,只显示该 class 的方法和属性。此外,如果您正在处理可变数组,如果您添加了错误类型的对象,编译器可能会警告您。

最重要的是,轻量级泛型在 Objective-C 中不是必需的,但您只需利用编译器的能力来推断您预期在集合中使用的类型。它不会像您在 Swift 泛型中看到的那样强制执行任何运行时强类型(这就是它被称为 "lightweight" 的原因),但它提供了更有意义的编译时警告和代码完成。


有关详细信息,请参阅