2012-05-26 53 views
0

Rectangle的实现部分,当我遗漏了#import "XYpoint"它仍然对我一样。是否将#import "XYpoint"良好做法或它影响程序?是否需要在此处使用#import?

#import <Foundation/Foundation.h> 

@interface XYPoint : NSObject 
@property int x, y; 

-(void) setX: (int) xVar andY: (int) yVar; 

@end 

#import "XYpoint.h" 

@implementation XYPoint 
@synthesize x, y; 

-(void) setX:(int)xVar andY:(int)yVar { 
    x = xVar; 
    y = yVar; 
} 

@end 

#import <Foundation/Foundation.h> 

    @class XYPoint; 
    @interface Rectangle: NSObject 

    -(XYPoint *) origin; 
    -(void) setOrigin: (XYPoint *) pt; 
@end 

#import "Rectangle.h" 
#import "XYpoint.h" 

@implementation Rectangle { 
    XYPoint *origin; 
} 

-(void) setOrigin:(XYPoint *)pt { 
    origin = pt; 
} 
-(XYPoint *) origin { 
    return origin; 
} 

@end 

#import "XYpoint.h" 
#import "Rectangle.h" 

int main (int argc, char * argv[]) { 
    @autoreleasepool { 
     Rectangle *rect = [[Rectangle alloc] init]; 
     XYPoint *pointy = [[XYPoint alloc] init]; 

     [pointy setX:5 andY:2]; 
     rect.origin = pointy; 

     NSLog(@"Origin %i %i", rect.origin.x, rect.origin.y); 
    } 
    return 0; 
} 

回答

3

你实现Rectangle不使用XYPoint类的任何细节。它只是将其视为一个通用指针,并且不会将其消息或解除引用。因此,前向声明(在Rectangle接口文件中的@class声明)就足够了。导入标题对编译的程序没有任何影响。

很有可能您的课程最终会发展为关注XYPoint课程的界面。当它这样做时,它将需要导入该接口声明。如果你忽略导入它,编译器会警告你。

这就是说,没有理由不导入它。

相关问题