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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 傘が咲く 高级黑马   /  2014-5-6 20:53  /  2307 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 傘が咲く 于 2014-5-6 20:56 编辑
  1. #import <Foundation/Foundation.h>

  2. @interface Student : NSObject
  3. {
  4.     @public
  5.     char *name;
  6.     int stu_id;
  7. }
  8. - (void)study;

  9. @end

  10. @implementation Student

  11. - (void)study
  12. {
  13.     NSLog(@"%s,%d学会了很多东西!!",name,stu_id);
  14. }

  15. @end

  16. int main()
  17. {
  18.     Student *stu1 = [Student new];
  19.     Student *stu2 = [Student new];
  20.     stu1->name = "zhangsan";
  21.     stu1->stu_id = 123;
  22.    
  23.     stu2->name = "lisi";
  24.     stu2->stu_id = 124;
  25.    
  26.     [stu1 study];
  27.     [stu2 study];//这两个对象调用的 study方法是否是同一个?
  28.     return 0;
  29. }
复制代码
java的对象里有类的方法,问上述代码里两个Student对象里有没有类中的study方法,与java对象有何区别!{:3_66:}

评分

参与人数 1技术分 +1 收起 理由
脸皮猴 + 1

查看全部评分

5 个回复

倒序浏览
本帖最后由 zfan 于 2014-5-6 22:26 编辑

上述的study方法是对象方法,而非类方法,objc中定义类方法需要在方法名前加 一个+ 号来标识;与Java对比来看,objc中的对象方法与java中的非静态方法对应,类方法同静态方法对应;关于两种方法加载进内存的方式刚才我的回复有误,这里修改一下,两种方法都伴随类加载进内存,但是对象方法的调用依赖于对象

评分

参与人数 1技术分 +1 收起 理由
脸皮猴 + 1

查看全部评分

回复 使用道具 举报
实例方法(动态方法)和类的方法(静态方法)你应该都清楚了,OC中对这两种方法的定义如楼上哥们所述,用-、+号区分。类的静态方法代码共享,由类名直接调用。在C#中,一个类的所有方法都会被记录在方法列表中,当实现一个类的实例的时候,会根据这个类的方法列表,区分动静态方法分别实现,动静态方法在内存中的存储位置也不一样,这个没有深入研究
看LZ的写法,貌似C++很牛逼呀,以后多多请教

评分

参与人数 1技术分 +1 收起 理由
脸皮猴 + 1

查看全部评分

回复 使用道具 举报
当创建一个类的对象时,就会为这个对象分配一块内存,在这个对象的内存中存储着该对象的成员变量,并且为成员变量初始化;但是对象的内存中没有类中的方法,因为在使用类创建对象之前,会将类加载进内存,在类中放有方法,在每个对象内部默认都有一个isa指针,指向这个对象所对应的类,当我们使用对象调用方法时,就会调用类中的方法,所以一个类的所有对象调用相同名字的方法时,调用的是同一个方法。

评分

参与人数 1技术分 +1 收起 理由
脸皮猴 + 1

查看全部评分

回复 使用道具 举报
方法是同一个方法,调用者不同,结果也是不同的
回复 使用道具 举报
多态啊这就是
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马