A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

之前有类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了)

4 个回复

倒序浏览
逻辑没错吧,试了下可以,就是看着有点别扭呢。。
回复 使用道具 举报
从今以后 发表于 2015-1-17 01:45
逻辑没错吧,试了下可以,就是看着有点别扭呢。。

嗯嗯,谢谢啦,看来是视频里老师的表述和我的理解出现了偏差。
回复 使用道具 举报
没有错啊。
回复 使用道具 举报
set是值传递吧
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马