如何在避免“多个方法命名...”警告的同时正确地重新定义自我?

时间:2010-03-26 16:42:51

标签: objective-c xcode gcc

在Apple的The Objective-C Programming Language: Defining a Class中,名为“Redefining self”的部分建议分配和返回实例的类方法仅使用'self'来分配实例,然后仅引用该实例。因此,我有许多子类,它们具有类方法:

+ (id)scrollViewWithFrame: (NSRect)rectFrame
{
    id newInstance = [[[self alloc] initWithFrame:rectFrame] autorelease];
    [newInstance setHasHorizontalScroller: YES];
    [newInstance setHasVerticalScroller: YES];
    [newInstance setBorderType: NSNoBorder];
    [newInstance setAutoresizingMask: (NSViewWidthSizable
                | NSViewHeightSizable)];

    return newInstance;
}

以上是NSScrollView的子类。不幸的是,使用Xcode 3.x所有这些NSView子类现在都会引发警告:“警告:找到名为'-setAutoresizingMask'的多个方法”。我认为它与GCC 4.2有关,它使用Xcode默认设置。

当然,警告是正确的,因为NSView及其各种子类都实现了setAutoresizingMask,但它也是不必要的。因为它们只是警告,所以我忽略了它们,但是存在这样的风险:在三十个左右的不必要的警告中,有一个非常有用的警告隐藏在我看不到的地方。那么该怎么办?我确实希望遵循良好的编码实践,并且我想建立无警告的应用程序 - 我该如何做到?

1 个答案:

答案 0 :(得分:3)

关于“找到多个方法”的警告意味着多个类实现setAutoresizingMask:并且编译器无法分辨这是哪一个因为变量是id类型的。编译器警告您可能(因为对象的类未知)可能会出错。尝试键入newInstance作为NSScrollView*或您的班级,警告就会消失。您仍然可以返回id,因为它等同于所有对象指针类型。它只是你发送消息的变量,编译器想要静态输入。