Я недавно обновился до Xcode 4.2, и он начал выдавать мне так много семантических предупреждений с моим кодом ...
один из них - это «конфликтующие модификаторы распределенных объектов по типу возвращаемого значения в реализации 'release'» в моем синглтон-классе ..
Я где-то читал о - (oneway void) release; чтобы выпустить это предупреждение, но как только я вставлю это в в моем коде я начинаю получать ошибку компиляции как «Повторяющееся объявление выпуска», не знаю, почему, и если вы попытаетесь найти второе объявление, которое отображается в этой строке
SYNTHESIZE_SINGLETON_FOR_CLASS (GlobalClass);
Обновление: это сообщение , где объясняется о выпуске - (односторонняя недействительность);
как избавиться от этого предупреждения "конфликтующие модификаторы распределенных объектов по типу возвращаемого значения в реализации релиза"? и почему это происходит?
Пост, на который вы ссылаетесь, содержит решение проблемы в заголовке и объясняет, почему это случилось с вами.
Однако, прочитав ваш вопрос, вы обнаружите, что ваша новая проблема вызвана неправильным применением великого совета в ответе на этот пост. Я совершенно уверен, что вы добавили строку
- (oneway void) release {}
в свой файл .m вместо того, чтобы дополнить существующую строку
- (void) release {
дополнительным словом «oneway» .
Вот почему вы получаете «Дубликат декларации об освобождении». Да, это сбивает с толку, потому что это дублирующее определение, которое незаметно создает дублирующую декларацию. Но я только что попытался сделать это по-своему, и я получил это сообщение «дубликат декларации».
У меня сложилось впечатление, возможно, ошибочное, что вы не понимали, что у вас действительно есть метод релиза, особенно когда вы думаете, что добавление строки «выпустит это предупреждение».
Не воспринимайте все ошибки слишком буквально и всегда пытайтесь понять, что кто-то может на самом деле значить, поскольку это часто отличается от того, что они говорят, но постарайтесь понять, что находится в вашем коде, даже в тех классах, которые вы взяли с полки.
И чтобы ответить на другие поднятые вопросы, причина, по которой вы отменяете релиз, заключается в том, что это синглтон, который обычно не выпускается. Возможно, в вашем коде есть только определение, которого будет достаточно.
То, что Джонатан Гринспан должен сказать об указании как на декларацию, так и на определение, в целом является действительным (и, действительно, корнем проблемы), но важно признать, что в этом конкретном случае декларация осуществляется базовым кодом Apple, изменено.
Так что, если это еще не ясно, измените строку, с которой XCode находит проблему, чтобы включить слово «односторонний» .