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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© x65396731 中级黑马   /  2014-8-21 14:23  /  1744 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

比如类Car是Student类的组合,
@interface Car
{
       int _speed;
}
@property int speed;

@interface Student
{
     Car *_car;
     NSString *_name;
     int _age;
}
@property (retain)Car *car;
@property (retain)NSString *name;
@property int age;

现在我想重写dealloc方法,想在里面加一句输出
- (void)dealloc
{
        [ _car release];
         [ _name release];
        NSLog(@“开着%d速度的汽车且名叫%@的%d岁学生的成员变量消失了”,self.speed,_name,_age);
         [super dealloc];
}

其中我不确定self.speed这样写对不对,我是想通过当前对象调用Car类里的_speed.(用get间接调用)
网上问了群友,告诉我self只能代表当前类或对象,那请问这里应该怎么写,谢谢了。

7 个回复

倒序浏览
直接使用car对象的getter方法_car.speed或者使用指针调用_car->_speed都可以,建议用前面的;不知道楼主是记者发帖还是粗心了,还有给楼主个建议:
1、在创建任何类的时候都应该指明其父类,如果没有继承关系,父类应该是NSObject

2、那个speed的定义,要么就自己手动定义,要么就使用@property关键字定义,只能用一个

3、@property使用的时候非OC对象的普通成员应该加上assign约束;还有所有的成员对于ios开发的最好加上nonatomic约束

或许有些东西你还没有看到,我废话有点多,楼主见谅:lol

点评

谢谢  发表于 2014-8-21 15:44
回复 使用道具 举报
再问一句 self.car.speed 应该也是可以的吧?
如果只写@property int speed; 这样写成员变量是私有的吧。
_car.speed
_car->_speed;就都无法访问了?
回复 使用道具 举报
self代表着当前方法的调用者哦
回复 使用道具 举报
x65396731 发表于 2014-8-21 15:52
再问一句 self.car.speed 应该也是可以的吧?
如果只写@property int speed; 这样写成员变量是私有的吧。
_ ...

我觉得这个self.car.speed等价于[[self car] speed]
[self car]返回的是id吧 ,id类型的对象,哪里来的speed的getter方法,应该会报错,我现在电脑不在,没有试过,应该不行。
@property默认的是private也就是本身和子类可以访问的,,而且现在是重写dealloc就是在类本身嘛,所以_car.speed和_car->_speed,私有的声明是在m文件@impelentation和@end之间的,非OC对象的成员应该这样比较好
@property (nonatomic, assign)  speed;
回复 使用道具 举报
天蚕飞 发表于 2014-8-22 10:39
我觉得这个self.car.speed等价于[[self car] speed]
[self car]返回的是id吧 ,id类型的对象,哪里来的sp ...

private私有的只能当前类使用吧
回复 使用道具 举报
★彬★卍囧神 发表于 2014-8-22 11:37
private私有的只能当前类使用吧

抱歉说错了,@property默认的是protected:lol,还是版主厉害
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马