在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 *位?还是我错过了什么?

最佳答案

将文字转换为常量是个好习惯,因为:

  • 可以避免输入错误,就像你说的
  • 如果要更改常量,只需在一个位置更改

  • 我更喜欢使用static const NSString* static NSString* const,因为它比#define更加安全。除非确实需要,否则我倾向于避免使用预处理器。

    07-28 06:22