`
瓶鱼跃
  • 浏览: 20673 次
  • 性别: 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算法的加密+解密实现.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语言

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

    基于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官方文档,...

    Object-C语言教程0220.zip

    本教程0220.zip包含了一份关于Object-C语言的详细教学资料,旨在帮助初学者和有经验的开发者深入理解其核心概念和特性。 1. **类与对象**:Object-C是面向对象的语言,其基本单元是类。类定义了对象的属性(实例...

    Object-C语言教程

    **Object-C语言教程** Object-C,全称Objective-C,是一种基于C语言的面向对象编程语言,主要用于Apple的iOS...通过深入学习Object-C,开发者不仅可以理解面向对象编程的基本原理,还能掌握iOS和macOS开发的关键技能。

    Object-C语言教程、案例、相关项目资源《PPT文档》

    Object-C,作为苹果公司开发的Objective-C(通常简写为ObjC)是一种基于C语言的面向对象编程语言,是iOS和macOS等Apple平台上的主要开发语言。它在C语言的基础上增加了Smalltalk风格的消息传递机制,为开发者提供了...

    Object-C-使用Object-C实现的堆栈stacks+队列queues.zip

    在Object-C中,我们可以通过自定义类来实现这两种数据结构。下面将详细介绍堆栈和队列的概念以及如何用Object-C来实现它们。 **堆栈(Stack)** 堆栈是一种后进先出(Last In First Out,简称LIFO)的数据结构,它...

    Object-C语言详细学习教程 入门攻略整理面试.docx

    定义与特点:Object-C是一种基于C语言的面向对象编程语言,由Brad J. Cox于20世纪80年代早期设计,以SmallTalk-80语言为基础。它支持面向对象、动态性、扩展性、自动垃圾回收机制、C语言兼容性以及静态类型检查等...

Global site tag (gtag.js) - Google Analytics