为什么在头文件中没有声明该变量?

时间:2012-03-09 20:16:20

标签: objective-c

根据斯坦福大学Objective-C课程2010/2011秋季,讲座3:

typedef struct {
    float x;
    float y;
} Point;

@interface Bomb
@property Point position;
@end

@interface Ship : Vehicle {
    float width, height;
    Point center;
}

@property float width;
@property float height;
@property Point center;
- (BOOL)getsHitByBomb:(Bomb *)bomb;
@end

@implementation Ship

@synthesize width, height, center;

- (BOOL)getsHitByBomb:(Bomb *)bomb
{
    float leftEdge = self.center.x - self.width/2;
    float rightEdge = ...;

    return ((bomb.position.x >= leftEdge) &&
        (bomb.position.x <= rightEdge) &&
        (bomb.position.y >= topEdge) &&
        (bomb.position.y <= bottomEdge));

}

@end

为什么浮动leftEdge并浮动右边界面?

此外,返回案例,这意味着如果所有这些案例都是正确的则返回YES,否则返回NO(如果情况为真则为1,如果为假则为0)。正确?

2 个答案:

答案 0 :(得分:4)

leftEdgerightEdge不在界面中,因为它们是局部变量。它们在该功能中仅

关于你的第二个问题,你是对的。情况确实如此。

当您需要将变量放在由它表示的对象的一部分时,您只将变量放在接口(类)上。示例:如果您的界面代表车辆,那么numberOfWheels可能是一个接口(类)变量。当您只需要某个范围(函数)中的变量进行临时计算时(例如示例中的leftEdgerightEdge),那么您只需要一个局部变量。

答案 1 :(得分:4)

局部变量和成员变量之间存在差异。成员变量是类的“全局”,可以从任何实例方法引用,因为它们是接口的一部分。 leftEdgerightEdge都是局部变量,并在getsHitByBomb:方法中声明。一旦方法返回/退出,它们就会超出范围。