浏览 8238 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (1)
|
|
---|---|
作者 | 正文 |
发表时间:2012-11-21
最后修改:2012-11-21
self概念上的理解上我认为和java中的this是一样的,当然,底层的实现是有区别的,毕竟是不同平台的两个语言,但是他们的概念的理解是一样的。就是在类实例化对象时,self指向了对象的首地址。 isa则相当于java中每个对象的class,就像我们平时写的,XXX.getClass()或XXX.class。OC中的isa指向了其类对象,想一下,我们在java中使用反射时不都是需要取得其类对象嘛!OC也一样,类对象isa也是用在运行时获取对象的类信息的。这样说其实和java中的class概念是一致的。大家可以参考这篇文章:http://blog.sina.com.cn/s/blog_7a2ffd5c01010nme.html 《Object-C基础教程》中有提到:“self指向的对象的首地址,而对象的首地址是isa变量”这样说不容易理解,会让人误会self 和 isa指向了同一个东西,应该是这样:self指向了对象的首地址,而对象的首地址一般是isa变量,isa又是保存了对象的类对象的首地址!汗,好像还是很绕,反正就是这两个变量其实是各有各的用处就是了。 -------------------------------------分割线------------------------------------------- 从这里顺便提一下子类的self和父类的self 我们初始化一个对象时会看到:self=[super init],先将父类初始化,然后再把父类的self赋给子类的self,这里又有点绕了,其实,父类的self和子类的self是同一个(正常情况下);那为什么要赋给子类的self呢?这就是因为有“非正常”的情况存在,大家可自行查阅,文章非常多。这里主要解释一下为什么父类的self和子类的self是同一个,我们平时看到很多文章会这么说:子类拥有一个父类的引用(无论是java还是OC都会这么说),我觉得这样说是不准确的说法,如果为了容易理解可以这么说。因为,如果只是简单的子类拥有父类的引用的话,父类的self和子类的self应该是不同的。和java一样,父类的this和子类的this也是同样的道理,我们用java做个试验: public class Father { public Father print(){ return this; } } public class Sun extends Father { Test t = new Test(); public void printSun(){ t.print(); System.out.println(super.toString()); System.out.println(super.print()); System.out.println(this); } public static void main(String args[]){ Sun sun = new Sun(); sun.printSun(); } public class Test { public void print(){ System.out.println("i am test this : " + this); } } 打印结果: i am test this : Test@c17164 Sun@1fb8ee3 Sun@1fb8ee3 Sun@1fb8ee3 我们看到,父类this和子类this是一样的,但是如果只是简单拥有一个引用,那么应该和Test的引用一样,是不一样的所以,说明父类和子类之间不是简单的拥有一个引用,我感觉是子类会把父类通过某种机制“包含”进来! 以上是本人粗浅的理解,欢迎批评指正!毕竟初学,希望和大家一起进步。 --------------------------------------------华丽丽的 分割线----------------------------------- object-c是动态语言,使用反射,还有动态往对象加方法等等一切动态的灵活性,都是因为有一个特殊的“代理”runtime,cocoa编程语言介绍如是说:因此这种动态性就需要借助Objective-C Runtime来实现,也就是说运行时我们除了有程序代码外还需要一个Objective C Runtime来协助完成程序的运行,这一点类似于Java的虚拟机。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2012-11-21
浏览101次,没人回复,什么情况····
|
|
返回顶楼 | |
发表时间:2012-11-22
话说,我想给你隐了.
没什么实质性的内容。 |
|
返回顶楼 | |
发表时间:2012-11-22
这能上首页……
|
|
返回顶楼 | |
发表时间:2012-11-22
witcheryne 写道 话说,我想给你隐了.
没什么实质性的内容。 为什么这么说?对底层的理解是很重要的,特别是一些概念上的东西~ |
|
返回顶楼 | |
发表时间:2012-11-22
gaobusi 写道 这能上首页……
那你如何理解self 和 isa? |
|
返回顶楼 | |