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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

@interface  Person : NSObject
@property int age;     
@end问题:@property  int age 中,在哪个位置生成的int  _age成员变量?是在@interface里面,还是在@implementation里面呢?看第二遍都视频都还没有搞清楚这个问题的答案?求解:)

评分

参与人数 1黑马币 +1 收起 理由
星河鹭起 + 1

查看全部评分

11 个回复

正序浏览
Jr_711 高级黑马 2014-11-25 18:18:50
12#
我记得网易公开课就有

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

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


回复 使用道具 举报
wang2003 发表于 2014-11-23 21:19
之前的记混了,看图片。
真正的数据储存在_ageef里面。
self。age 只是我们调用的时候用,相当于一个接口 ...

你在哪里看到的斯坦福的公开课啊!?兄弟,分享一下链接呗!
回复 使用道具 举报
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, 下载次数: 20)

捕获2014-11-23.PNG
回复 使用道具 举报
陌生爱人 发表于 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截图:
回复 使用道具 举报
角色扮演 发表于 2014-11-23 14:53
用MJ的话,搞个断点不就知道了.

老兄,试过了!这个是编译器自动生成的!断点直接就跳过了,看不出来的饿:lol
回复 使用道具 举报
wang2003 发表于 2014-11-23 15:32
@property int age;     实际上这句定义的就是_age,省略了下划线。

老兄应该不是吧!mj的视频就是这样讲到的!你有看过MJ的视频吗?
回复 使用道具 举报
wang2003 发表于 2014-11-23 15:32
@property int age;     实际上这句定义的就是_age,省略了下划线。

老兄不是吧!你有看过MJ的视频吗?
回复 使用道具 举报
角色扮演 发表于 2014-11-23 14:53
用MJ的话,搞个断点不就知道了.

我试过了,这个是编译器自动生成的 ,看不出来的!:lol
回复 使用道具 举报
@property int age;     实际上这句定义的就是_age,省略了下划线。
回复 使用道具 举报
肯定是在 @interface里面啊  像默认的@interface下面有个大括号{}  声明里面如果加了成员变量,.m文件都是不被引用的 那不乱套了
回复 使用道具 举报
用MJ的话,搞个断点不就知道了.
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马