我开始学习Objective-C的基础知识,目前正在阅读Kochan的(Progamming Objective C)。Objective C继承和语法
我被困在继承主题。
我有2个类和1个子类,XYPoint和矩形,正方形(正方形是矩形的子类)。
我有方法可以保留矩形对象的值X和Y坐标。
,这里是我的main.m文件
#import <Foundation/Foundation.h>
#import "Rectangle.h"
#import "Square.h"
#import "XYPoint.h"
int main(int argc, const char * argv[])
{
@autoreleasepool {
Square *square1 = [[Square alloc]init];
XYPoint *myPoint = [[XYPoint alloc]init];
[myPoint setX:33 andY:33];
[square1 setOrigin:myPoint];
[myPoint setX:25 andY:25];
NSLog(@"square1 origin is %i and %i",[[square1 origin]x],[[square1 origin]y]);
[myPoint setX:125 andY:125];
NSLog(@"square1 origin is %i and %i",[[square1 origin]x],[[square1 origin]y]);
[myPoint setX:25 andY:25];
NSLog(@"square1 origin is %i and %i",[[square1 origin]x],[[square1 origin]y]);
}
return 0;
}
和我Rectangle.m
-(void) setOrigin:(XYPoint *)pt{
if (!origin)
origin = [[XYPoint alloc]init];
origin.x = pt.x;
origin.y = pt.y;
}
-(XYPoint *)origin {
return origin;
}
和XYPoint.m文件从该计划
- (void) setX:(int)xVal andY: (int) yVal{
x = xVal;
y = yVal;
}
输出是:
2014-01-23 15:25:36.368 Rectangle1[4356:303] square1 origin is 33 and 33
2014-01-23 15:25:36.370 Rectangle1[4356:303] square1 origin is 33 and 33
2014-01-23 15:25:36.370 Rectangle1[4356:303] square1 origin is 33 and 33
NSLogged 3次。这种保留方法-(void) setOrigin:(XYPoint *)pt;
有助于保留矩形对象上的XY值,甚至通过setX和Y方法重新设置XY值。
,但是当我改变了保留方法为这样:
- (空)setOrigin:(的Xypoint *)PT {
if (!origin)
origin = [[XYPoint alloc]init];
origin = pt;
}
NSLogged输出变成这样:
2014-01-23 15:29:54.287 Rectangle1[4398:303] square1 origin is 25 and 25
2014-01-23 15:29:54.288 Rectangle1[4398:303] square1 origin is 125 and 125
2014-01-23 15:29:54.289 Rectangle1[4398:303] square1 origin is 25 and 25
什么这两者之间的区别是什么?这两个具有相同的特征指向x和y的相同坐标吗?
哦,我现在看到了,所以origin = pt和origin.x = pt.x之间存在巨大差异。虽然origin = pt用于指向地址值,并且origin.x = pt.x用于将pt.x值存储到origin.x中,但是目的是什么! (否定)如果(!起源)呢?是否只有一次功能,检查原点是否存在? – user3213703
是的。当你说'origin = pt; ** pt的**地址**(即myPoint)**被分配给Origin。当你说'origin.x = pt.x'时,这里分配的值不是地址。 – iamyogish
我也研究过斯蒂芬的书。如果你走得更远,他已经用整洁的图表解释了这一点。 – iamyogish