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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

3黑马币
新人求教 有点混  
(1)[p  dispPerson:p1]里为什么表示当前对象为p呢
(2)还有视频中定义狗这个类的方法时 直接就是_weight-=0.5f 为什么不是Dog->_weight -=0.5f?
(3)看到老师后面除了赋值给对象和对象作为参数时的在各属性前加了“->”其他时候好像省略了  是OC的写法可以省略是吗?

最佳答案

查看完整内容

(1)里为什么表示当前对象为p呢 p是指针,是向这个指针所指的位于堆区的实例对象发送了一个dispPerson消息,实例对象再向位于代码区的Person类发送dispPerson消息。是这样调用的。 (2)还有视频中定义狗这个类的方法时 直接就是_weight-=0.5f 为什么不是Dog->_weight -=0.5f? _weight-=0.5f只能是在Dog.m中调用,在外部不可以这么用。 Dog->_weight -=0.5f,这是一个错误的调用方法,因为Dog是一个类,类和类方法不可以调用成员 ...

4 个回复

倒序浏览
本帖最后由 408205555 于 2015-9-9 10:58 编辑

(1)[p  dispPerson:p1]里为什么表示当前对象为p呢
p是指针,[p dispPerson]是向这个指针所指的位于堆区的实例对象发送了一个dispPerson消息,实例对象再向位于代码区的Person类发送dispPerson消息。是这样调用的。
(2)还有视频中定义狗这个类的方法时 直接就是_weight-=0.5f 为什么不是Dog->_weight -=0.5f?
_weight-=0.5f只能是在Dog.m中调用,在外部不可以这么用。
Dog->_weight -=0.5f,这是一个错误的调用方法,因为Dog是一个类,类和类方法不可以调用成员变量,成员变量只有类的实例对象或成员方法才可以调用。
(3)看到老师后面除了赋值给对象和对象作为参数时的在各属性前加了“->”其他时候好像省略了  是OC的写法可以省略是吗?
->到后期不试用了,因为->这种访问实例成员的方法后期是不推荐使用的。因为类需要对自己的属性具有管理权和控制权,所以要对属性生成get/set方法,生成get/set方法后,就不能再使用->来赋值了,因为使用->调用不了类的成员变量了。所有可以使用点语法(p.weight)或[p setWeight][p weight]设置或获取对象的变量的值。
点语法在代码运行的时候实际上是替换成了[p setWeight]或[p weight]。之所以使用[p setWeight][p weight]是因为类对属性声明了get/set方法,不用get/set方法是无法访问实例变量的。这些都是很基础的东西,楼主你该仔仔细细的多看看OC基础视频。视频里老师除了开玩笑,说的每一句话都很有用的。
回复 使用道具 举报
本帖最后由 你说呢 于 2015-9-8 19:56 编辑

1.p调用的方法dispPerson 2._weight是当前对象的成员变量  相当于self.weight 或this.weight
Dog 是类对象不能调用成员变量
3.->是直接访问成员变量     成员变量是public 的      对象.成员变量  点语法
回复 使用道具 举报
你说呢 发表于 2015-9-8 19:50
1.p调用的方法dispPerson 2._weight是当前对象的成员变量  相当于self.weight 或this.weight
Dog 是类对象 ...

谢谢啦 刚学OC
回复 使用道具 举报
408205555 发表于 2015-9-7 23:03
(1)里为什么表示当前对象为p呢
p是指针,是向这个指针所指的位于堆区的实例对象发送了一个dispPerson消息 ...

刚看的前两天 跟C有些混了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马