在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
更加安全。除非确实需要,否则我倾向于避免使用预处理器。