黑马程序员技术交流社区
标题:
为什么不能写成[c setPoint:[Point2D new]]呢?
[打印本页]
作者:
liu1170486003
时间:
2015-1-17 00:47
标题:
为什么不能写成[c setPoint:[Point2D new]]呢?
之前有类Point2D
@interface Point : NSObject
@property double x;
@property double y;
@end
然后有类Circle
@interface Circle : NSObject
@property double radius;
@property Point2D *point;
@end
那我在main函数中为什么不能这样设置Circle类的Point属性呢:
Cirle *c = [Circle new];
[c setPoint:[Point2D new]];
这样写为什么不行呢,视频重复放了好几遍都没有理解。
[Point2D new]返回的不是一个新的Point2D对象的指针么,而这个指针刚好可以当做Cirle中圆心的setter方法的参数。虽然这样执行完后c中的point属性的值是空的,但是在执行[Point2D new]的时候不是就已经分配空间(虽然分配的内存空间里是空的),并返回这个空内存空间的地址了么.也就是说如果我想要继续操作c中的point属性,我就可以通过其getter方法[c point2D]来获取已经分配在内存中的那段空的Point2D对象了,进而可以调用Point2D对象的setter方法,来设置这个Point2D对象的属性值了。代码如下:
[[c point] setX:10];
[[c point] setX:11];
那么程序运行到这里后,Circle对象c里面的Point2D属性的值就是:_x是10;_y是11了。
我不知道我这样的逻辑错误在哪里,大家可以帮我解释下么。(现在还没有编译环境,所有代码只能考YY了)
作者:
从今以后
时间:
2015-1-17 01:45
逻辑没错吧,试了下可以,就是看着有点别扭呢。。
作者:
liu1170486003
时间:
2015-1-17 14:07
从今以后 发表于 2015-1-17 01:45
逻辑没错吧,试了下可以,就是看着有点别扭呢。。
嗯嗯,谢谢啦,看来是视频里老师的表述和我的理解出现了偏差。
作者:
mengxingdong
时间:
2015-1-17 14:15
没有错啊。
作者:
haojuncong
时间:
2015-1-17 14:32
set是值传递吧
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2