Мне было интересно, когда и когда не использовать методы класса и методы экземпляра. Мне нужны практические примеры. Я действительно смущен. Другой вопрос: разве мы не можем делать то же самое с методами экземпляра, что и с методами класса?
Методы класса и методы экземпляра - когда/когда их не использовать?
Ответы (5)
Если вы хотите использовать объект экземпляра или переменную экземпляра, вам нужно использовать методы экземпляра. Bcz Внутри класса вы не можете получить доступ к объекту или переменной экземпляра экземпляра.
Методы класса являются статическими методами.
Методы класса: метод не привязан к какому-либо конкретному объекту. В некотором смысле он действует как свободная функция в пространстве имен класса. Нет указателя «я». Например, [UIScreen mainScreen] — это метод класса, потому что есть только один экран и нет необходимости заботиться о нескольких «экземплярах экрана».
Метод экземпляра: привязан к конкретному объекту.
Это относится к большинству ОО-языков, а не только к obj-C.
На уровне реализации вызов метода экземпляра содержит скрытый указатель на структуру данных (объект), а метод класса — нет.
Практический вопрос, который следует задать, заключается в том, требует ли ваш вызов отправки некоторых конкретных данных, которые лучше всего инкапсулировать как данные экземпляра внутри объекта, или нет.
Вы (обычно) можете делать то же самое с методами класса в качестве методов экземпляра, но тогда вам нужно явно передать объект в качестве видимого параметра в вызове, что выглядит более уродливо, а также потенциально отключает некоторые функции переопределения методов языка Objective C. .
self
; это ссылка на объект класса.
- person jscs; 25.06.2011
Используйте методы класса для служебных функций и методы экземпляра для объектно-ориентированного материала. Например. Для математических расчетов (например, sin x ) используйте метод класса. Но для вызова поведения, характерного для объекта... используйте метод экземпляра..
Метод класса, как следует из названия, ограничен классом. Вы можете вызывать их только с именем конкретного класса. Это могут быть обычно открытые методы класса. Например, NSArray
+ (id)arrayWithArray:(NSArray *)array;
.
Вы называете это именем класса NSArray. То, что вы ожидаете, — это просто создание объекта типа этого конкретного класса. Для этого не нужен объект для вызова. Кроме того, это очень простой метод, поэтому лучше сделать его методом класса.
С другой стороны, метод экземпляра, как следует из названия, очень сильно привязан к экземпляру. Объект — это сущность, которая инкапсулирует состояние (ивары) и поведение (методы) класса. Это может быть очень специфичным для объекта. Например
- (NSUInteger)count;
Возьмем NSArray *a и NSArray *b. Если a содержит 5 элементов, а b — 4, методы экземпляра, вызванные для этих экземпляров, дадут разные результаты. И именно поэтому нам нужно инициализировать экземпляры при вызове метода экземпляра. Они работают с контекстом (или состоянием) вызываемого объекта. Также они не выставляются, как методы класса.
Надеюсь это поможет.