ios - 静态 NSString 使用与内联 NSString 常量

标签 ios objective-c nsstring

在 Objective-C 中,我的理解是指令 @"foo"定义了一个常量 NSString。如果我在多个地方使用@"foo",则会引用同一个不可变的 NSString 对象。

为什么我经常看到这个代码片段(例如在 UITableViewCell 重用中):

static NSString *CellId = @"CellId";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellId];
if (cell == nil) {
    cell = [[UITableViewCell alloc] initWithStyle:style reuseIdentifier:CellId];

不仅仅是:

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"CellId"];
if (cell == nil) {
    cell = [[UITableViewCell alloc] initWithStyle:style reuseIdentifier:@"CellId"];

我认为这是为了防止我在标识符名称中出现编译器无法捕获的拼写错误。但如果是这样,我就不能:

#define kCellId @"CellId"

并避免静态 NSString * 位?还是我错过了什么?

最佳答案

将文字转换为常量是一种很好的做法,因为:

  1. 如您所说,这有助于避免拼写错误
  2. 如果要更改常量,只需在一处更改即可

我更喜欢使用 static const NSString* static NSString* const,因为它比 #define 稍微安全一些。除非我真的需要它,否则我倾向于避免使用预处理器。

关于ios - 静态 NSString 使用与内联 NSString 常量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1937685/

相关文章:

ios - 如何将异步方法变成同步方法

objective-c - 从 Objective-C 工厂方法创建 Swift 实例

objective-c - 如何连续获取 NSSlider 的值?

ios - 如何更改数字输入 UITextField 或 UILabel 的顺序

iphone - 如何以不同方式格式化 UILabel 字符串中的不同字符?

ios - 更改 iOS 中的第一个 ViewController

ios - 在 NSMutableArray 中存储联系人列表

ios - 绘制直线和创建曲线拖线

iphone - 如何关闭 iPhone/iPad 中的 pushViewController?

ios - 追加到 NSString 方法的开头