我应该为每个函数声明函数原型吗?

时间:2012-02-23 05:18:36

标签: objective-c ios function

在Obj-C中,函数原型的最佳实践是什么?我应该将它们包含在我的类中的每个函数中,还是只包含需要的函数(即函数调用在函数实现之前发生)

3 个答案:

答案 0 :(得分:3)

最佳练习是为您定义的每个函数和方法准确设置一个原型。那个原型应该取决于你是否想要将这个功能暴露给你班级以外的世界。如果你跳过原型并只包含函数体,你可能会侥幸逃脱它。 (例如,您可以在下面的示例中在运行时从类外部向您的控制器发送stop。)但最好确保点击您的i并交叉您的t。请注意,在我下面的示例中,所有内容都已计入。希望这会有所帮助。

MyAppController.h:

@interface MyAppController : NSObject {
   id thing;
@private
   id noneOfYourBeeswax;
}

@property (nonatomic, readonly) id thing;

-(id)initWithThing:(id)thing;
-(void)start;

@end

MyAppController.m:

@interface MyAppController () // anonymous category

@property (readwrite, retain) id thing;
@property (nonatomic, retain) NSThread *noneOfYourBeeswax;

-(void)start_internal;
-(void)stop;

@end


@implementation MyAppController 

@synthesize thing;
@synthesize noneOfYourBeeswax;

-(id)initWithThing:(id)thing_ {
   if ((self = [super init]) != nil) {
      self.thing = thing_;
   }

   return self;
}


-(void)start {
   // I think I'm doing this wrong but you get the picture
   self.noneOfYourBeeswax = [[[NSThread alloc] initWithTarget:self selector:start_internal object:nil] autorelease];
}

// The real worker
-(void)start_internal {
   while (such and such) {
      // do something useful
   }

   [self stop];
}


-(void)stop {
   // clean up
}

@end

答案 1 :(得分:2)

一般来说,除非编译器需要,否则不需要转发声明私有函数和方法。我认为推进主动宣布没有实际好处。即使是出于内部文档目的,最好将文档放在函数附近,而不是放在文件顶部。

当然,你必须在标题中声明公共方法和函数,你也应该在那里记录它们。但这是一个单独的问题。

答案 2 :(得分:1)

如果您的源文件非常大,那么在顶部记录内部文件可能很有用(也很有礼貌):

@interface MyClass ()
- (void)internalMethod;
...
@end

但除非他们有循环引用,否则没有必要。 (A呼叫B,B呼叫A,不能先放两个)。我已经知道在文件中向上移动一个以避免需要私有接口。