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

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


person Tushar Chutani    schedule 25.06.2011    source источник


Ответы (5)


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

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

person MK_iOS    schedule 15.12.2014

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

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

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

person seand    schedule 25.06.2011
comment
Фактически метод класса привязан к объекту класса и, как и метод экземпляра, имеет скрытый параметр self, указывающий на этот объект класса. - person jscs; 25.06.2011

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

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

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

person hotpaw2    schedule 25.06.2011
comment
Методы класса также имеют скрытый параметр self; это ссылка на объект класса. - person jscs; 25.06.2011

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

person Abhishek    schedule 25.06.2011

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

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

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

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

- (NSUInteger)count;

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

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

person Meera    schedule 20.02.2013