黑马程序员技术交流社区

标题: 请教一个MJ老师没有讲到的一个问题!貌似有点深度 [打印本页]

作者: gululu23    时间: 2014-11-23 13:58
标题: 请教一个MJ老师没有讲到的一个问题!貌似有点深度
@interface  Person : NSObject
@property int age;     
@end问题:@property  int age 中,在哪个位置生成的int  _age成员变量?是在@interface里面,还是在@implementation里面呢?看第二遍都视频都还没有搞清楚这个问题的答案?求解:)

作者: 角色扮演    时间: 2014-11-23 14:53
用MJ的话,搞个断点不就知道了.
作者: 陌生爱人    时间: 2014-11-23 15:16
肯定是在 @interface里面啊  像默认的@interface下面有个大括号{}  声明里面如果加了成员变量,.m文件都是不被引用的 那不乱套了
作者: wang2003    时间: 2014-11-23 15:32
@property int age;     实际上这句定义的就是_age,省略了下划线。
作者: gululu23    时间: 2014-11-23 19:28
角色扮演 发表于 2014-11-23 14:53
用MJ的话,搞个断点不就知道了.

我试过了,这个是编译器自动生成的 ,看不出来的!:lol
作者: gululu23    时间: 2014-11-23 19:29
wang2003 发表于 2014-11-23 15:32
@property int age;     实际上这句定义的就是_age,省略了下划线。

老兄不是吧!你有看过MJ的视频吗?
作者: gululu23    时间: 2014-11-23 19:32
wang2003 发表于 2014-11-23 15:32
@property int age;     实际上这句定义的就是_age,省略了下划线。

老兄应该不是吧!mj的视频就是这样讲到的!你有看过MJ的视频吗?
作者: gululu23    时间: 2014-11-23 19:34
角色扮演 发表于 2014-11-23 14:53
用MJ的话,搞个断点不就知道了.

老兄,试过了!这个是编译器自动生成的!断点直接就跳过了,看不出来的饿:lol

作者: gululu23    时间: 2014-11-23 19:52
陌生爱人 发表于 2014-11-23 15:16
肯定是在 @interface里面啊  像默认的@interface下面有个大括号{}  声明里面如果加了成员变量,.m文件都 ...

但我感觉是在@implementation里面的啊,原因如下:@interface Person :NSObject
@property int age;
@end
@implementation Person
@synthesize age = _age;


@end
以上代码就会在implementation中生成一个private类型的int _age;
来自MJ老师的ppt截图:

作者: wang2003    时间: 2014-11-23 21:19
gululu23 发表于 2014-11-23 19:32
老兄应该不是吧!mj的视频就是这样讲到的!你有看过MJ的视频吗?

之前的记混了,看图片。
真正的数据储存在_ageef里面。
self。age 只是我们调用的时候用,相当于一个接口,调用对应的setter或者getter,因为很多时候我们实现setter时还要做别的工作。
手动实现getter 和 setter ,只能给_ageef赋值或者取值,而不能self。age(相当于在调用setter或getter,然后就不用干别的事情了)。
再深点说,age是不是static的,会有不同的储存位置。

刚才有查看了一下斯坦福的公开课,
@synthesize age = _ageef; 这里只是指定实例变量名,age 去使用_aggef这个实例变量。
_ageef是储存数据的实例变量,等号看起来比较奇怪,不要理解为赋值,只是指定一下。

大概就是这样。

捕获2014-11-23.PNG (35.29 KB, 下载次数: 16)

捕获2014-11-23.PNG

作者: gululu23    时间: 2014-11-25 18:07
wang2003 发表于 2014-11-23 21:19
之前的记混了,看图片。
真正的数据储存在_ageef里面。
self。age 只是我们调用的时候用,相当于一个接口 ...

你在哪里看到的斯坦福的公开课啊!?兄弟,分享一下链接呗!
作者: Jr_711    时间: 2014-11-25 18:18
我记得网易公开课就有

应该是@interface里面自动生成的吧

只要自动生成的好像都是@private的







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