В 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 *? Или я что-то упускаю?