目标C shenanigans

时间:2011-09-19 22:10:58

标签: objective-c xcode

在我成为Objective C的大师的过程中,我一直在探讨它的细微之处,我想与大家分享并理解为什么

1)我有两个init方法,一个是NSObject为Objective C类继承的方法,另一个是我自己创建的自定义方法,让我们说

initCustomMethod:(int)par1 argument2:(int)par2;

我的目标是通过提供的init方法调用initCustomMethod,基本上是

-(id)init{
    return [self initCustomMethod:1 argument2:3];
}

当然,维护顺序,我在.m文件中的initCustomMethod之前出现了init。 Xcode警告我告诉我没有找到initCustomMethod,我继续调整顺序并在initCustomMethod声明后出现init并且没有这样的警告消息,一切都很好。

我同意订单很重要,因为它主要来自C,但我不确定。因为,我改变了一些属性及其自定义方法的顺序,在给定属性的自定义setter方法之后声明了属性@synthesize,但是没有这样的错误副本。

有人能指出这里的恶意吗?

谢谢你们!


非常酷的家伙,谢谢你帮我解决这个问题。此外,由于我有一个自定义init方法,我正在初始化此方法中的super并使用原始的init方法来调用自定义init方法。

这有什么不对吗?

3 个答案:

答案 0 :(得分:5)

在任何地方引用它之前,您应该在界面中声明 initCustomMethod:argument2,这通常位于您的头文件中。

例如,您通常会有一个.h文件,如下所示:

@interface MyClass
{
    //instance variables
    int anInstanceVariable;
}

// properties
@property (nonatomic, assign) int aProperty;

// methods
-(id)initCustomMethod:(int)par1 argument2:(int)par2;

@end

如果您这样做,定义 initinitCustomMethod:argument2:的顺序无关紧要。这是因为声明告诉编译器你定义方法,以及它的外观,所以在以后使用时不会混淆。

答案 1 :(得分:2)

在Objective-C中使用函数或方法在声明或定义之前是个坏主意。将initCustomMethod:argument2:置于init之前意味着前者已在后者中定义。但如果您只是在标题中声明它,那么它们进入的顺序无关紧要。

答案 2 :(得分:2)

在头文件中添加自定义方法名称 - 编译器只是按顺序进行处理。如果您没有前向声明,编译器将不知道如何处理该调用。如果您希望程序的其他部分能够调用它,则需要将其放在标题中。