Методы класса и методы экземпляра - когда / когда их не использовать?
Мне было интересно, когда и когда не следует использовать методы класса и методы экземпляра. Мне нужны некоторые практические примеры. Я действительно смущен. Другой вопрос: не можем ли мы сделать то же самое с методами экземпляра, что мы можем с методами класса?
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) используйте метод класса. Но для вызова поведения, специфичного для объекта.. используйте метод экземпляра..