Могу ли я назвать переменную класса «id» (например, NSString * id)? Все, кажется, работает, за исключением того, что я не могу сделать [id release] в методе dealloc. Я создаю экземпляры этого класса из парсера XML, используя конструкцию object/key, поэтому мне нужно, чтобы это называлось id. Я пробовал [self.id release] и все работает, за исключением того, что анализатор показывает мне предупреждение: «Свойство возвращает объект Objective-C с +0 счетчиком сохранения» и «Неправильный декремент подсчета ссылок объекта, который на данный момент не принадлежит абоненту ». Так что мне интересно, не делаю ли я что-то незаконное. Большое спасибо.Objective C Переменная класса IOS под названием «id»
ответ
id
в объективе-c является предопределенным типом. Вы, вероятно, следует назвать это нечто иное, как idString
Это то же самое, пытаясь назвать переменную int
или другая цель-с ключевого слова, как if
id
является ключевым словом в Objective-C. Это слабый идентификатор переменной типа, аналогичный var
в javascript.
Не делайте этого.
- Это бессмысленное имя - идентификатор , что?
- Он сталкивается с языком ключевого слова и обязан иметь некоторые нежелательные эффекты где-то
- Это больно читаемость, люди будут задаваться вопросом, что вы имеете в виду в любой точке в коде
да, я знаю. Я пробовал это, потому что я собираю istances этого класса с помощью XML-анализатора (читай из внешнего xml, который я не могу контролировать), с установкой ojbect/keys. У меня более 30 переменных. Я думаю, что я буду использовать if ([isEqualString: @ "id"]) в синтаксическом анализаторе, чтобы изменить имя этого конкретного свойства. Спасибо. – user1427835
Фактически (если это не изменилось с Xcode 4.3, которого у меня еще нет), имена переменных и typedefs (из которых 'id' равно единице) существуют в отдельных пространствах имен в Objective-C. В последнее время я просто видел освещенную записку, но сейчас я не могу ее найти. – echristopherson
@echristopherson, который все еще оставляет точки 1 и 3 ... – jrturton
На самом деле, в АРК , id - '__strong' по умолчанию :) Также следует отметить, что вы не можете вставить что-либо в' id' и ожидать, что он будет работать. –
слабый тип - это не то же самое, что слабая ссылка. Это слабый тип. Я ожидаю, что у меня может быть слабый ссылочный слабый тип: '(__weak id)' –
Я делал немного шутки. Я просто говорю, что ваш ответ может использовать некоторое разъяснение. –