`
瓶鱼跃
  • 浏览: 21102 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

关于Object-C 底层实现self isa 的理解

iOS 
阅读更多

其他废话我就不多讲了,谈一谈我对self 和 isa的理解!主要是和java对比:
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语言教程及实际案例】Object-C语言教程及实际案例

    Object-C语言教程及实际案例Object-C语言教程及实际案例Object-C语言教程及实际案例Object-C语言教程及实际案例Object-C语言教程及实际案例Object-C语言教程及实际案例Object-C语言教程及实际案例Object-C语言教程及...

    Object-C语言文件读写操作代码

    Object-C语言文件读写操作代码,Object-C语言文件读写操作代码,Object-C语言文件读写操作代码,Object-C语言文件读写操作代码,Object-C语言文件读写操作代码,Object-C语言文件读写操作代码,Object-C语言文件读写...

    Object-C语言教程&案例&相关项目资源

    Object-C语言教程&案例&相关项目资源,Object-C语言教程&案例&相关项目资源,Object-C语言教程&案例&相关项目资源,Object-C语言教程&案例&相关项目资源,Object-C语言教程&案例&相关项目资源,Object-C语言教程&...

    Object-Cios苹果app开发入门object-c例子demo14个实例 一般编程问题

    【Object-C】ios苹果app开发入门object-c例子demo14个实例 一般编程问题 【实例简介】 ios苹果app开发入门,object-c,例子,demo,14个实例 初学者难得的学习实例 【实例截图】 【核心代码】 归档 ├── Air...

    Object-C语言详解(文档)

    Object-C语言详解(文档) 仅供学习交流! 后续会持续分享相关资源,记得关注哦! Object-C语言详解(文档) 仅供学习交流! 后续会持续分享相关资源,记得关注哦! Object-C语言详解(文档) 仅供学习交流! ...

    基于Object-C语言实现列表选择(项目源码).rar

    本资源提供了一个基于Object-C语言实现列表选择功能的项目源码,旨在帮助开发者学习如何使用Object-C语言开发iOS应用中的列表选择功能。源码中包含了实现列表选择的关键代码和必要资源文件,开发者可以通过学习源码...

    Object-C-在iOS上使用Object-C进行RSA算法的加密+解密实现代码

    Object-C-在iOS上使用Object-C进行RSA算法的加密+解密实现代码 在iOS平台上,Object-C是开发原生应用的主要编程语言之一,尤其在苹果的移动设备上。RSA(Rivest-Shamir-Adleman)是一种非对称加密算法,广泛应用于...

    Object-C语言教程.zip

    通过学习教程,开发者可以掌握如何使用Object-C编写功能丰富的应用程序,并且能够理解和利用苹果的API接口。 压缩包中的文件列表显示,除了包含Object-C语言的基础教程之外,还包含了一个使用说明文件。这个使用...

    Object-C-在iOS上使用Object-C进行RSA算法的加密+解密实现.zip

    总之,使用Object-C在iOS上实现RSA加密解密涉及理解算法原理、导入导出密钥、调用Security框架的API以及处理可能出现的问题。通过掌握这些知识,开发者可以创建安全的应用程序,保护用户数据的安全。

    如何学习Object-C语言《PDF文档》

    Object-C是一种基于C语言的面向对象编程语言,主要应用于苹果的iOS和macOS平台开发。学习Object-C语言是成为Apple平台应用开发者的必备技能之一。本文将深入探讨如何有效地学习和掌握这一强大的编程语言。 理解基础...

    如何学习Object-C语言(PDF文档)

    Object-C是一种基于C语言的面向对象编程语言,主要应用于苹果的iOS和macOS平台开发。学习Object-C语言是成为Apple平台应用开发者的必备技能之一。本文将深入探讨如何有效地学习和掌握这一强大的编程语言。 理解基础...

    基于object-c实现人脸识别活体检测眨眼检测ios源码.zip

    基于object-c实现人脸识别活体检测眨眼检测ios源码.zip基于object-c实现人脸识别活体检测眨眼检测ios源码.zip基于object-c实现人脸识别活体检测眨眼检测ios源码.zip基于object-c实现人脸识别活体检测眨眼检测ios源码...

    Object-C(Objective-C)-C语言的扩展

    Object-C(Objective-C)是一种面向对象的编程语言,它的出现源于C语言,并加入了面向对象编程的特性。作为Apple公司推崇的编程语言,它在iOS和macOS应用程序开发中占据重要地位。Object-C的核心特性包括了继承C语言...

    如何学习Object-C语言

    总之,学习Object-C语言需要对C语言有扎实的理解,掌握面向对象编程的概念,熟悉Objective-C的特性和苹果的开发框架。不断实践和跟随技术的发展,才能成为一名优秀的Object-C开发者。阅读《Cocoa Programming for ...

    Object-C语言解决旅行包问题.zip

    具体到Object-C语言的实现,程序员需要定义一个类来封装旅行包问题的逻辑,包括物品的重量、价值以及背包的容量等属性,还需要定义方法来进行动态规划算法的计算。在这个过程中,程序员需要处理数组的动态分配和内存...

    Object-C语言教程、案例与相关项目资源指南

    这些知识点对于理解苹果公司的Cocoa和Cocoa Touch框架至关重要,因为这两个框架底层就是使用Object-C编写的。 案例分析部分是本教程的精华所在,它通过实际的项目案例,帮助学习者将理论知识应用到实践中。每个案例...

    基于Object-C语言实现仿抖音APP

    iOS仿抖音app 抖音demo适配了iphone、ipad,同时兼容iOS8.0至iOS12.0系统。当前抖音demo使用Object-...Object-C项目是一个使用Objective-C编程语言开发的计算机程序,特别适用于macOS和iOS操作系统的应用程序开发。

    Object-C-在iOS上使用Object-C进行RSA算法的加密+解密实现源代码

    Object-C-在iOS上使用Object-C进行RSA算法的加密+解密实现源代码 在iOS平台上,Object-C是开发原生应用的主要编程语言之一,尤其在苹果的移动设备上。RSA(Rivest-Shamir-Adleman)是一种非对称加密算法,广泛应用于...

    Object-C是一种基于Smalltalk的编程语言,主要用于Mac OS X和iOS应用程序开发 Object-C的资源主要

    Object-C是一种基于Smalltalk的编程语言,主要用于Mac OS X和iOS应用程序开发。Object-C的资源主要分为官方文档、社区驱动的资源、学习资源和工具等。 官方文档 Apple Developer Documentation:Apple官方文档,...

Global site tag (gtag.js) - Google Analytics