Ответ 1
Вы просто добавляете свой собственный код в методName в classB:
- (void)methodName
{
// custom code
// call through to parent class implementation, if you want
[super methodName];
}
У меня возникают проблемы с вычислением часа, чтобы точно переопределить метод в одном из моих подклассов.
У меня есть подкласс (ClassB) другого пользовательского класса (ClassA):
@interface ClassB : ClassA {
}
и внутри ClassA
существует метод, называемый:
-(void)methodName;
который срабатывает правильно.
Однако мне нужен этот метод для запуска в ClassB
.
Я попытался реализовать (в ClassB
):
-(void)methodName {
[super methodName];
}
но он все равно не срабатывает в ClassB
.
Как я могу переопределить имя метода, чтобы оно срабатывало в ClassB
?
Вы просто добавляете свой собственный код в методName в classB:
- (void)methodName
{
// custom code
// call through to parent class implementation, if you want
[super methodName];
}
Сначала убедитесь, что ваш метод init создает объект ClassB, а не объект ClassA (или что-то еще).
Затем, если вы хотите создать совершенно другой метод methodB (void) methodName: тот, который найден в классе A, это способ:
Супер - суперкласс. Вызывая [super methodName], вы запрашиваете у ClassA собственное имя метода. Если вы хотите полностью переопределить методName из класса A, просто не называйте super.
Итак, в основном, в вашей реализации классаB имя метода:
-(void)methodName {
// Remove [super methodName]
// Insert the code you want for methodName in ClassB
}
Не стесняйтесь читать Сообщения для себя и супер в Apple. <Язык > Язык программирования Objective-C.
Пишем:
-(void)methodName {
[super methodName];
}
Расскажите компилятору: при выполнении методаName класса B вызовите методName своего суперкласса (класс A). Поэтому, если вы хотите, чтобы класс B выполнял что-то другое, вам нужно написать код, который приведет к другому поведению. Вот так:
-(void)methodName {
NSLog(@"Hello, world!");
}
Теперь, вызывая методName класса B "Привет, мир!" будет напечатана на консоли.
-(void)methodName {
[super methodName];
}
Хотите вызвать методName (в ClassB), просто удалите [super method], тогда вы можете его запустить. Причина super - вызов класса ClassA
Хотя этот вопрос слишком стар, но есть некоторые ученики, поскольку каждый эксперт был, Ниже приводится ссылка на документацию Apple. "Новый метод должен иметь один и тот же тип возврата и принимать те же самые числа и типы параметров, что и метод, который вы переопределяете". полный ответ можно найти в Apple, переопределяющая документацию Надеюсь, это поможет кому-то.