Как правильно переопределить себя, избегая предупреждения «Несколько методов с именем ...»? - PullRequest
1 голос
/ 26 марта 2010

В Apple Язык программирования Objective-C: определение класса раздел с именем «Переопределение себя» рекомендует, чтобы методы класса выделяли и возвращали экземпляры, используя «себя» только для выделения экземпляра, а затем только ссылки в этом случае. Таким образом, у меня есть несколько подклассов, у которых есть методы класса по типу:

+ (id)scrollViewWithFrame: (NSRect)rectFrame
{
    id newInstance = [[[self alloc] initWithFrame:rectFrame] autorelease];
    [newInstance setHasHorizontalScroller: YES];
    [newInstance setHasVerticalScroller: YES];
    [newInstance setBorderType: NSNoBorder];
    [newInstance setAutoresizingMask: (NSViewWidthSizable
                | NSViewHeightSizable)];

    return newInstance;
}

Выше, конечно, подкласс NSScrollView. К сожалению, с Xcode 3.x все эти подклассы NSView теперь вызывают предупреждения: «Предупреждение: найдено несколько методов с именем -setAutoresizingMask». Я считаю, что это как-то связано с GCC 4.2, который использует настройки по умолчанию Xcode.

Предупреждение, конечно, верно, поскольку NSView и его различные подклассы реализуют setAutoresizingMask, но это также не нужно. Поскольку это всего лишь предупреждения, я их игнорирую, но есть риск, что между тридцатью или около того ненужными из них будет действительно полезное предупреждение, которого я просто не вижу. Так что делать? Я хочу придерживаться хороших методов кодирования и хочу создавать приложения без предупреждений - как я могу сделать то и другое?

1 Ответ

3 голосов
/ 26 марта 2010

Это предупреждение о "нескольких найденных методах" означает, что несколько классов реализуют setAutoresizingMask:, и компилятор не может определить, какой это класс, потому что переменная введена id. Компилятор предупреждает вас, что возможно (так как класс объекта неизвестен), что вы можете получить неправильный. Попробуйте набрать newInstance либо как NSScrollView*, либо как класс, и предупреждение исчезнет. Вы все еще можете вернуть id, поскольку он эквивалентен всем типам указателей на объекты. Это просто переменная, в которую вы отправляете сообщения, которую компилятор желает получить статической типизацией.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...