0

Rectangle在我遗漏的实施部分中,#import "XYpoint"它对我来说仍然有效。是在进行#import "XYpoint"良好的实践还是会影响计划?

#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;
}
4

1 回答 1

3

您的实现Rectangle不使用XYPoint该类的任何细节。它只是将其视为通用指针,从不发送消息或取消引用它。因此,前向声明(接口文件@class中的语句Rectangle)就足够了。导入头文件对编译后的程序没有任何影响。

您的类很可能Rectangle最终会演变为关心XYPoint类的接口。当它这样做时,它将需要导入该接口声明。如果您忽略导入它,编译器会警告您。

也就是说,几乎没有理由不导入它。

于 2012-05-27T01:37:47.260 回答