Назначение методов экземпляра или методов класса в Objective-C

Я проверил все эти вопросы...

... и все, что они объясняют, - это то, как методы экземпляра используются для экземпляров методов класса и класса с классом, когда сообщение отправляется в класс. Это полезно, но мне любопытно узнать , почему можно использовать метод класса против метода экземпляра.

Ответы

Ответ 1

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

На практике вы обнаружите, что почти все ваши методы должны быть методами экземпляра. Просто взгляните на любой существующий класс Objective-C типа NSString, NSArray, UIView и т.д., И вы увидите, что подавляющее большинство их методов являются методами экземпляра. Наиболее распространенное использование методов класса (опять же, посмотрите на классы, о которых я упоминал) предназначены для конструкторов удобства, которые возвращают объекты autorelease или одноэлементные аксессоры.

Рассмотрим метод length в NSString. Почему это метод экземпляра, а не метод класса? Это метод экземпляра, потому что имеет смысл спросить конкретный экземпляр NSString, какова его длина. Задавать NSString вообще для длины (т.е. Если длина была методом класса) не имеет никакого смысла.

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