Класс Objective-C создать методы - PullRequest
2 голосов
/ 18 февраля 2011

Допустим, у нас есть класс Base.

@inerface Base : NSObject
{
}
+(id) instance;
@end

@implementation Base
+(id) instance
{
    return [[[self alloc] init] autorelease];
}
-(id) init
{
...
}
@end

И у нас есть производный класс Derived.

@interface Derived : Base
{
}
@end

, который переопределяет метод init.

Теперь мы хотим создать экземпляр класса Derived, используя метод класса +(id) instance.

id foo = [Derived instance];

И теперь foo на самом деле является базовым классом.

Как добиться, чтобы foo был производнымкласс в этом случае?

Должен ли я переопределить все методы класса для производных классов?(на самом деле реализация будет полностью такой же).

Есть ли более элегантный способ?

1 Ответ

2 голосов
/ 18 февраля 2011

Когда вы создаете экземпляр, используя [Derived instance], этот экземпляр будет иметь класс Derived.Попытайся.Хитрость заключается в обмене сообщениями self в методе instance:

+(id) instance
{
    return [[[self alloc] init] autorelease];
}

При отправке сообщения instance на Base, self равно Base.Когда вы отправляете то же сообщение на Derived, self равно Derived, и, следовательно, все работает так, как нужно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...