Назовите метод экземпляра от метода класса

Таким образом, я должен назвать некоторые методы экземпляра от методов класса в Objective C...

Пример:

+(id)barWithFoo:(NSFoo *) {
[self foo]; //Raises compiler warning. 
}

-(void)foo {
//cool stuff
}

Так мой вопрос; StackOverFlow является как дела такими вещами в Objective C, я плохо знаком отчасти с ООП, также - действительно ли я безумен, или существует ли способ сделать это?

17
задан Chirag Kothiya 21 June 2018 в 17:16
поделиться

2 ответа

Не существует способ сделать это. Это просто не работает с объектно-ориентацией.

Классы видов вещей. Вот и все. Они просто описывают , что делает такого рода вещей.

Пример может быть то, что у вас есть класс «Собака». У вас были бы методы экземпляра, которые определили, как собака вешает его хвост или как она ест. У вас может быть метод класса для покупки собаки.

Моя домашняя собака Фидо является экземпляром класса собаки. Я могу отправлять сообщения FIDO, рассказывая ему, что его хвост и ешь еду. Однако я не могу попросить класс «собака», чтобы вилить хвост; Чей хвост будет вилять? Будет ли это Fido, или это будет собака моей соседки?

Когда вы отправляете сообщение в класс, у вас нет переменных «самоуверенности». Там нет ничего, что могло сказать себе, чтобы водить свой хвост. Сообщения классов в основном используются для создания экземпляров класса или получения в другой общую информацию.

Редактировать: Чтобы уточнить, что последний пункт является упрощением. В методах классов есть переменная «Self» в методах класса, как BBUM - это ссылка на компьютер на описание класса. Тем не менее, я не думаю, что у меня когда-либо имел возможность использовать «себя» в классе методом.

26
ответ дан 30 November 2019 в 11:17
поделиться

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

Self - это ссылка на привязку, которая воспринимается. Таким образом, Self в классовом методе является класс и Self в методе экземпляра - это экземпляр класса.

Итак, наивно, вы можете сделать:

+(id)barWithFoo:(NSFoo *) {
    [[[self alloc] init] foo]; //Raises compiler warning. 
}

-(void)foo {
//cool stuff
}

, конечно, это утечка памяти в приложении не-GC (поскольку экземпляр не выпускается или автоматически выделяется). Вместо того, чтобы объяснить, почему я указываю на объективную документацию Intro . Это некоторые потрясающие вещи, охватывающие как объективные и общие объектно-ориентированные шаблоны программирования.

16
ответ дан 30 November 2019 в 11:17
поделиться