Bre*_*ett 24 iphone objective-c
我在计算小时时遇到了一些问题,无法准确地覆盖我的一个子类中的方法.
我有另一个customclass(ClassA)的子类(ClassB):
@interface ClassB : ClassA {
}
Run Code Online (Sandbox Code Playgroud)
在内部ClassA,有一种方法叫做:
-(void)methodName;
Run Code Online (Sandbox Code Playgroud)
这是正确的.
但是,我需要这种方法来启动ClassB.
我试过实现(in ClassB):
-(void)methodName {
[super methodName];
}
Run Code Online (Sandbox Code Playgroud)
但它仍然不会开火ClassB.
如何覆盖methodName以便它将被触发ClassB?
Man*_*Way 33
您只需在classB中的methodName中添加自定义代码:
- (void)methodName
{
// custom code
// call through to parent class implementation, if you want
[super methodName];
}
Run Code Online (Sandbox Code Playgroud)
Rem*_*hem 20
首先,确保您的init方法创建一个ClassB对象而不是ClassA(或其他)对象.
然后,如果你想创建一个完全不同的classB(void)methodName:方法而不是在classA中找到的方法,这就是要走的路:
超级是超级.通过调用[super methodName],您要求ClassA执行它自己的methodName.如果要完全覆盖classA中的methodName,则不要调用super.
所以,基本上,在你的classB的methodName实现中:
-(void)methodName {
// Remove [super methodName]
// Insert the code you want for methodName in ClassB
}
Run Code Online (Sandbox Code Playgroud)
在Apple的Objective-C编程语言文档中,随意阅读自己和超级消息.
| 归档时间: |
|
| 查看次数: |
46996 次 |
| 最近记录: |