Методы класса и методы экземпляра - когда / когда их не использовать?

Мне было интересно, когда и когда не следует использовать методы класса и методы экземпляра. Мне нужны некоторые практические примеры. Я действительно смущен. Другой вопрос: не можем ли мы сделать то же самое с методами экземпляра, что мы можем с методами класса?

5 ответов

Если вы хотите использовать экземпляр objet или переменную экземпляра, вы должны использовать методы экземпляра. Bcz Внутри класса вы не можете получить доступ к объекту экземпляра экземпляра или переменной экземпляра.

Методы класса являются статическими методами.

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

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

Вы (обычно) можете делать то же самое с методами класса, что и методы экземпляра, но тогда вам нужно явно передать объект как видимый параметр в вызове, который выглядит более уродливо и потенциально может отключить некоторые функции переопределения методов языка Objective C,

Метод класса, как следует из названия, ограничен классом. Вы можете вызывать их только с именем определенного класса. Это могут быть нормально выставленные методы класса. Например, NSArray

+ (id)arrayWithArray:(NSArray *)array;,

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

С другой стороны, метод экземпляра, как следует из названия, очень сильно привязан к экземпляру. Объект - это объект, который инкапсулирует состояние (ivars) и поведение (методы) класса. Это может быть очень специфичным для объекта. Например

- (NSUInteger)count;

Давайте возьмем NSArray *a и NSArray * b. Если a содержит 5 элементов, а b содержит 4, методы экземпляров, вызываемые для этих экземпляров, будут давать разные результаты. И именно поэтому нам нужно инициализировать экземпляры при вызове метода экземпляра. Они работают над контекстом (или состоянием) объекта, к которому они призваны. Также они не выставлены как методы класса.

Надеюсь это поможет.

Методы класса: метод не привязан к какому-либо конкретному объекту. В некотором смысле это действует как свободная функция в пространстве имен класса. Нет указателя "я". Например, [UIScreen mainScreen] является методом класса, потому что есть только один экран, и нет необходимости заботиться о нескольких "экземплярах экрана".

Метод экземпляра: привязан к определенному объекту.

Это относится к большинству ОО-языков, а не только к obj-C.

Используйте методы класса для служебных функций и методы Instance для объектно-ориентированного материала. Например. Для математического расчета (например, sin x) используйте метод класса. Но для вызова поведения, специфичного для объекта.. используйте метод экземпляра..

Другие вопросы по тегам