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 に答える