2012-06-27 2 views
1

Могу ли я назвать переменную класса «id» (например, NSString * id)? Все, кажется, работает, за исключением того, что я не могу сделать [id release] в методе dealloc. Я создаю экземпляры этого класса из парсера XML, используя конструкцию object/key, поэтому мне нужно, чтобы это называлось id. Я пробовал [self.id release] и все работает, за исключением того, что анализатор показывает мне предупреждение: «Свойство возвращает объект Objective-C с +0 счетчиком сохранения» и «Неправильный декремент подсчета ссылок объекта, который на данный момент не принадлежит абоненту ». Так что мне интересно, не делаю ли я что-то незаконное. Большое спасибо.Objective C Переменная класса IOS под названием «id»

ответ

3

id в объективе-c является предопределенным типом. Вы, вероятно, следует назвать это нечто иное, как idString

Это то же самое, пытаясь назвать переменную int или другая цель-с ключевого слова, как if

2

id является ключевым словом в Objective-C. Это слабый идентификатор переменной типа, аналогичный var в javascript.

+0

На самом деле, в АРК , id - '__strong' по умолчанию :) Также следует отметить, что вы не можете вставить что-либо в' id' и ожидать, что он будет работать. –

+0

слабый тип - это не то же самое, что слабая ссылка. Это слабый тип. Я ожидаю, что у меня может быть слабый ссылочный слабый тип: '(__weak id)' –

+0

Я делал немного шутки. Я просто говорю, что ваш ответ может использовать некоторое разъяснение. –

1

Не делайте этого.

  • Это бессмысленное имя - идентификатор , что?
  • Он сталкивается с языком ключевого слова и обязан иметь некоторые нежелательные эффекты где-то
  • Это больно читаемость, люди будут задаваться вопросом, что вы имеете в виду в любой точке в коде
+0

да, я знаю. Я пробовал это, потому что я собираю istances этого класса с помощью XML-анализатора (читай из внешнего xml, который я не могу контролировать), с установкой ojbect/keys. У меня более 30 переменных. Я думаю, что я буду использовать if ([isEqualString: @ "id"]) в синтаксическом анализаторе, чтобы изменить имя этого конкретного свойства. Спасибо. – user1427835

+0

Фактически (если это не изменилось с Xcode 4.3, которого у меня еще нет), имена переменных и typedefs (из которых 'id' равно единице) существуют в отдельных пространствах имен в Objective-C. В последнее время я просто видел освещенную записку, но сейчас я не могу ее найти. – echristopherson

+0

@echristopherson, который все еще оставляет точки 1 и 3 ... – jrturton