0

我有一个在其超级方法中实现的方法。当我运行我的程序时。它工作正常。如何抑制此警告?顺便说一句,这两种方法都在“.m”文件中。

代码是这样的:

类A.m

@interface ClassA()
- (void)method;
@end

类A.h

@interface ClassA : ClassB
@end

B类.m

@interface ClassB()
@end
@implementation ClassB
- (void)method
{
}

当我在 ClassA 中调用方法时它工作正常

4

3 回答 3

2

无论如何,您总是可以实现该方法,并调用超级方法 -

-(void)doMyThing {

    [super doMyThing];

    // do nothing

}
于 2012-04-13T11:00:05.923 回答
0

听起来您已经在 .h 文件中声明了您不应该声明的方法?或者 .h 文件中可能缺少 @end。

你没有给我们太多的继续。我们可以从 .h 和 .m 中查看您的完整代码吗?


阅读您的代码示例后,请尝试以下操作:

类A.h

@interface ClassA : ClassB  
//ClassB inherits from Class A, so we define 'method' in Class B
//ClassA knows about 'method' by inheritance from class B,
//so 'method' doesn't need to be defined here.

//doStuff will be the method that calls 'method'
- (void)doStuff;
@end

类A.m

@interface ClassA
@end

@implementation ClassA
- (void)doStuff
{
   //Call 'Method'       
  [self method];
}
@end

B类.h

@interface ClassB  
//Define 'method' which will be inherited by ClassA 
- (void)method;
@end

B类.m

@interface ClassB
@end

@implementation ClassB
- (void)method
{
   //'method' does it's thing       
  NSLog(@"Method has been Called");
}
@end
于 2012-04-13T11:50:23.167 回答
0

你完全错了。流行的建筑是有:

B类.h

@interface ClassB
- (void)method;
@end

B类.m

@interface ClassB()
@end
@implementation ClassB
- (void)method
{
    //do nothing or even assert false
}
@end

类A.h

@interface ClassA : ClassB
@end

类A.m

@interface ClassA()
@end
@implementation ClassA
- (void)method
{
    //do your stuff here
}
@end

这就是所谓的方法覆盖。但是,如果我正确理解您要实现的目标,您应该拥有:

B类.h

@interface ClassB
- (void)method;
@end

B类.m

@interface ClassB()
@end
@implementation ClassB
- (void)method
{
    //do your stuff here
}
@end

类A.h

@interface ClassA : ClassB
@end

而且不用乱搞ClassA,可以调用

ClassA *o=[[ClassA alloc ] init];
[o method];

然后method由于从 ClassB 继承,所以在 classA 中可用。

于 2012-04-13T12:16:44.140 回答