Конфликт модификаторов распределенных объектов по типу возвращаемого значения в реализации 'release' в классе Singleton

Я недавно обновился до Xcode 4.2, и он начал выдавать мне так много семантических предупреждений с моим кодом ...

один из них - это «конфликтующие модификаторы распределенных объектов по типу возвращаемого значения в реализации 'release'» в моем синглтон-классе ..

Я где-то читал о - (oneway void) release; чтобы выпустить это предупреждение, но как только я вставлю это в в моем коде я начинаю получать ошибку компиляции как «Повторяющееся объявление выпуска», не знаю, почему, и если вы попытаетесь найти второе объявление, которое отображается в этой строке

SYNTHESIZE_SINGLETON_FOR_CLASS (GlobalClass);

Обновление: это сообщение , где объясняется о выпуске - (односторонняя недействительность);

как избавиться от этого предупреждения "конфликтующие модификаторы распределенных объектов по типу возвращаемого значения в реализации релиза"? и почему это происходит?

28
задан Community 23 May 2017 в 09:59
поделиться

1 ответ

Пост, на который вы ссылаетесь, содержит решение проблемы в заголовке и объясняет, почему это случилось с вами.

Однако, прочитав ваш вопрос, вы обнаружите, что ваша новая проблема вызвана неправильным применением великого совета в ответе на этот пост. Я совершенно уверен, что вы добавили строку

- (oneway void) release {}

в свой файл .m вместо того, чтобы дополнить существующую строку

- (void) release {

дополнительным словом «oneway» .

Вот почему вы получаете «Дубликат декларации об освобождении». Да, это сбивает с толку, потому что это дублирующее определение, которое незаметно создает дублирующую декларацию. Но я только что попытался сделать это по-своему, и я получил это сообщение «дубликат декларации».

У меня сложилось впечатление, возможно, ошибочное, что вы не понимали, что у вас действительно есть метод релиза, особенно когда вы думаете, что добавление строки «выпустит это предупреждение».

Не воспринимайте все ошибки слишком буквально и всегда пытайтесь понять, что кто-то может на самом деле значить, поскольку это часто отличается от того, что они говорят, но постарайтесь понять, что находится в вашем коде, даже в тех классах, которые вы взяли с полки.

И чтобы ответить на другие поднятые вопросы, причина, по которой вы отменяете релиз, заключается в том, что это синглтон, который обычно не выпускается. Возможно, в вашем коде есть только определение, которого будет достаточно.

То, что Джонатан Гринспан должен сказать об указании как на декларацию, так и на определение, в целом является действительным (и, действительно, корнем проблемы), но важно признать, что в этом конкретном случае декларация осуществляется базовым кодом Apple, изменено.

Так что, если это еще не ясно, измените строку, с которой XCode находит проблему, чтобы включить слово «односторонний» .

50
ответ дан 28 November 2019 в 03:14
поделиться