Таким образом, я должен назвать некоторые методы экземпляра от методов класса в Objective C...
Пример:
+(id)barWithFoo:(NSFoo *) {
[self foo]; //Raises compiler warning.
}
-(void)foo {
//cool stuff
}
Так мой вопрос; StackOverFlow является как дела такими вещами в Objective C, я плохо знаком отчасти с ООП, также - действительно ли я безумен, или существует ли способ сделать это?
Не существует способ сделать это. Это просто не работает с объектно-ориентацией.
Классы видов вещей. Вот и все. Они просто описывают , что делает такого рода вещей.
Пример может быть то, что у вас есть класс «Собака». У вас были бы методы экземпляра, которые определили, как собака вешает его хвост или как она ест. У вас может быть метод класса для покупки собаки.
Моя домашняя собака Фидо является экземпляром класса собаки. Я могу отправлять сообщения FIDO, рассказывая ему, что его хвост и ешь еду. Однако я не могу попросить класс «собака», чтобы вилить хвост; Чей хвост будет вилять? Будет ли это Fido, или это будет собака моей соседки?
Когда вы отправляете сообщение в класс, у вас нет переменных «самоуверенности». Там нет ничего, что могло сказать себе, чтобы водить свой хвост. Сообщения классов в основном используются для создания экземпляров класса или получения в другой общую информацию.
Редактировать: Чтобы уточнить, что последний пункт является упрощением. В методах классов есть переменная «Self» в методах класса, как BBUM - это ссылка на компьютер на описание класса. Тем не менее, я не думаю, что у меня когда-либо имел возможность использовать «себя» в классе методом.
Если вы хотите вызвать метод экземпляра, вам нужен экземпляр для вызова метода включен.
Self
- это ссылка на привязку, которая воспринимается. Таким образом, Self
в классовом методе является класс и Self
в методе экземпляра - это экземпляр класса.
Итак, наивно, вы можете сделать:
+(id)barWithFoo:(NSFoo *) {
[[[self alloc] init] foo]; //Raises compiler warning.
}
-(void)foo {
//cool stuff
}
, конечно, это утечка памяти в приложении не-GC (поскольку экземпляр не выпускается или автоматически выделяется). Вместо того, чтобы объяснить, почему я указываю на объективную документацию Intro . Это некоторые потрясающие вещи, охватывающие как объективные и общие объектно-ориентированные шаблоны программирования.