黑马程序员技术交流社区

标题: @property int x创出的成员变量是_x还是x? [打印本页]

作者: 哈利梅    时间: 2014-10-20 10:32
标题: @property int x创出的成员变量是_x还是x?
看视频感觉越看有些地方越糊涂了。。。请问一下:
@property int x
@property int y
用这个创出的成员变量是_x还是x???
下面如果有一个对象方法让输入x和y的值,例如:
- (void)setX:(int)x  andY:(int)y
{
    //这个位置是输入:
      _x = x;
      _y = y;

    //还是输入:
      x = x;
      y = y;
}


我看视频上面说,创出的对象应该是_x和_y,但是你如果注意的话,就在老师说这句之前,后面的作业点评上有个同学写的就是 self.x = x;   self.y = y;    这样就把我弄糊涂了,求各位大神们帮忙啊,谢谢了
作者: 哈利梅    时间: 2014-10-20 10:46
那个不高兴的小脸是怎么出来的???各位不要太在意啊,那个是个 :  和  (  合到一起写所以自动出来的。。。。。希望大家可以看懂,不好意思啊~~~~下次注意
作者: JAH562    时间: 2014-10-20 11:11
.如果不创建成员变量 int x ,int y, 4.5以上版本的xcode 会默认生成私有_x 和_y 这样就可以省略 @synthesize
若在创建了成员变量则 就不会自动生成了
student :NSObject{
@property int x
@property int y



}没有这段的话 就会自动 创出_x 和_Y

2. 你的方法格式写错了吧  如果用了@property的话就不用set方法了

作者: 哈利梅    时间: 2014-10-20 11:24
不是的,请你再看看,下面的set方法不是用来定义setter和getter的,而是用来给成员变量赋值的,就是一个赋值的方法,所以本身写的没有错误的,而且请注意你说的哦,首先,你的@property不能够写到{}大括号里面的,而是在大括号外面,所以你写错了,另外,你说:}没有这段的话 就会自动 创出_x 和_Y   这个是错的,有了上面的@property,系统才会自动定义x和y,我现在问的是,自动定义出来的成员变量x和y的形式不是很明确,不知道是不是在前面带有下划线,请知道的大神们帮帮忙,谢谢了~~~~
作者: x65396731    时间: 2014-10-20 13:36
这个貌似是xcode的特性,用@property可以直接创建对应的成员变量的set和get方法,在类的内部的成员变量是加下划线的,因为你会发现,@property帮你自动写的set和get方法实现里面,是写 _x=x,不过我不能确定,我也是边学边忘
作者: 魔法少年十三    时间: 2014-10-20 13:52
_x = x;的意思是将传进来的x赋值给成员变量_x,self.x指的就是成员变量的_x,而不是形参的x,这样说能明白么?
作者: coyote    时间: 2014-10-20 23:53
@property int x;生产的成员变量是_x,所以下面写_x = x;是正确的,self.x是点语法,调用set方法
作者: qiusiyu    时间: 2014-10-21 07:36
@property 默认创建出来的就是苹果官方推荐的  _x  _y  的写法,这个毋庸置疑。输入时候当然是 _x=x;  至于楼主最后所说的作业点评,应该是该同学在实现中定义了 : @synthesize x=_x;




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2