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

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

Ответы [ 5 ]

2 голосов
/ 15 декабря 2014

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

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

1 голос
/ 20 февраля 2013

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

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

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

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

- (NSUInteger)count;

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

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

1 голос
/ 25 июня 2011

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

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

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

1 голос
/ 25 июня 2011

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

1 голос
/ 25 июня 2011

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

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

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

...