类的本质

 类的本质其实也是一个对象(类对象)

 类对象
类对象再程序运行时一直存在
类对象是一种数据结构,存储类的基本信息:类大小,类名称,类的版本以及消息与函数的映射表等
类对象所保存的信息在程序编译时确定,在第一次使用该类的时候加载到内存中
类对象代表类,class代表类对象,类方法属于类对象
如果消息的接受者是类名,则类名表示类对象
运行时,所有类的实例都由类对象生产,类对象会把实例的isa地值修改成自己的地址,每个实例的isa都指向该实例的类对象,
从类对象里可以知道父类信息、可以响应的方法等
类对象只能使用类方法,不能用实例方法 例:
  Person *p = [Person new];
  p 实例对象
  Person 也是一个对象(类对象),是Class类型

  

类对象的获取

 )通过实例对象获取
Dog *dog =[Dog new];
Dog *d2 = [Dog new]; //第一种方法获取类对象
Class c =[dog class];
Clsss c2 =[d2 class]; NSLog(@"%p",c);
NSLog(@"%p",c2); )通过类名获取(类名其实就是类对象) Class c3=[Dog class];
NSLog(@"%p",c3);

  

类对象的使用

 原来使用类名可以做哪些事情?
    创建对象
    [Person new];
    调用类方法
    [Person test];//test是类方法  Person *p =[Person new];
  
   c1---->Person 类对象的使用
  Class c1 =[p class]; //Person
)创建实例对象
Person *p1= [c1 new];
)调用类方法
 [p test]; 调用的是实例方法 -动态的
[c1 test]调用的是类方法 +静态的

  

SEL类型

 SEL:全称selector表示方法的存储位置

 Person *p =[[Person allco]init];
[p test]; 寻找方法的过程:
)首先把test这个方法名包装成sel类型的数据;
)根据SEL数据找到对应的方法地址;
)根据方法地址调用相应的方法
)注意:在这个操作过程中有缓存,第一次找的时候是一个一个的找,非常耗性能,之后再用到的时候就直接使用 关于_cmd:每个方法的内部都有一个_cmd,代表着当前方法 SEL其实是对方法的一种包装,将方法包装成一个SEL类型的数据,去寻找对应的方法地址,找到方法地址就可以调用方法.这些都是运行时特征,发消息就是发送SEL,然后根据SEL找到地址,调用方法
  //手动的把eat方法包装成SEL类型
  SEL s1 =@selector(eat);
  //通过s1去调用了
  [p2 perfomSelector :s1];

  

OC类的介绍的更多相关文章

  1. oc-12-NSString 类简单介绍及用法

    // 11-[掌握]NSString 类简单介绍及用法 #import <Foundation/Foundation.h> int main(int argc, const char * ...

  2. OC 类簇与复合

    OC 类簇与复合 类簇: 类簇是Foundation框架中广泛使用的设计模式.类簇将一些私有的.具体的子类组合在一个公共的.抽象的超类下面,以这种方法来组织类可以简化一个面向对象框架的公开架构,而又不 ...

  3. 【Entity Framework】初级篇--ObjectContext、ObjectQuery、ObjectStateEntry、ObjectStateManager类的介绍

    本节,简单的介绍EF中的ObjectContext.ObjectQuery.ObjectStateEntry.ObjectStateManager这个几个比较重要的类,它们都位于System.Data ...

  4. Entity Framework 学习初级篇2--ObjectContext类的介绍

    转自:http://www.cnblogs.com/Tally/archive/2012/09/14/2685014.html 本节,简单的介绍EF中的ObjectContext.ObjectQuer ...

  5. 第一个OC类、解析第一个OC程序

    01第一个OC 类 本文目录 • 一.语法简介 • 二.用Xcode创建第一个OC的类 • 三.第一个类的代码解析 • 四.添加成员变量 • 五.添加方法 • 六.跟Java的比较 • 七.创建对象 ...

  6. CImage类的介绍与使用

    CImage类的介绍与使用 程序代码下载处:http://download.csdn.net/source/2098910 下载处:http://hi.baidu.com/wangleitongxin ...

  7. Objective-c 总结(一):OC类的设计

    (一)学习目标: 1.面向对象基本概念: OOP的主要思想是把构成问题的各个事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描述一个事物在整个解决问题步骤中的行为. 2.熟悉OC类的定 ...

  8. Entity Framework 学习初级篇2--ObjectContext、ObjectQuery、ObjectStateEntry、ObjectStateManager类的介绍

    本节,简单的介绍EF中的ObjectContext.ObjectQuery.ObjectStateEntry.ObjectStateManager这个几个比较重要的类,它们都位于System.Data ...

  9. JdbcTemolate类的介绍<一>

    JdbcTemolate类的介绍 JdbcTemplate是Spring JDBC的核心类,封装了常见的JDBC的用法,同时尽量避免常见的错误.该类简化JDBC的操作,我们只需要书写提供SQL的代码和 ...

随机推荐

  1. 关于数组和集合的冒泡排序中容易出现的IndexOutOfBoundsException

    数组只能存错一种相同的数据类型,集合只能存储引用数据类型(用泛型),集合的底层就是一个可变的数组. 数组的冒泡排序: public static void arrayMaxPaiXu(int[] ar ...

  2. 更改服务器的SID 加入域控制器提示SID重复

    启动Windows2008.2012进入系统后,打开“CMD窗口”并进入到"C:\windows\system32\sysprep"目录后再输入“sysprep /generali ...

  3. SpringMVC REST 风格请求介绍及简单实践

    简介 REST 即 Representational State Transfer.(资源)表现层状态转化.是目前最流行的一种互联网软件架构.它结构清晰.符合标准.易于理解.扩展方便,所以正得到越来越 ...

  4. iOS开发优秀博客和软件推荐

    iOSBlogAndTools iOS开发优秀博客和软件推荐 本博客和工具列表由广大iOS开发者收集和推荐,如果大家有好的博客或者工具想要分享请点击:我要提交. 收到大家的提交后会及时收录与更新.Gi ...

  5. iOS开发之数据存储之Core Data

    1.概述 Core Data框架提供了对象-关系映射(ORM)的功能,即能够将OC对象转化成数据,保存在SQLite3数据库文件中,也能够将保存在数据库中的数据还原成OC对象.在此数据操作期间,不需要 ...

  6. oracle server config

    安装oracle数据库软件 database/runInstaller; ##执行该程序开始安装 创建数据库 在oracle用户的图形界面oracle用户中 新开启一个终端,直接输入命令dbca会弹出 ...

  7. Linux常用命令整理

    1.常用命令:cd 进入 ls(list)查看当前目录下的文件 pwd 查看目录的路径 who an i 查看当前用户 clear 清除屏幕   2.绝对路径:从根目录开始\ 相对路径:上一层.下一层 ...

  8. VB中的GDI编程-1 设备环境DC

    p{ font-size: 15px; } .alexrootdiv>div{ background: #eeeeee; border: 1px solid #aaa; width: 99%; ...

  9. Visual Studio 2017创建.net standard类库编译出错原因

    正式版上个月已经Release了,从那时到现在经常会收到更新提示,估计问题还不少吧!其中最吸引我的当然是.net standard与.net core. 刚好最近接触.net standard项目,新 ...

  10. span表情输入框 --- Author: rose && lvyerose@163.com

        像QQ等社交聊天中,不可或缺的一部分就是我们常用的表情输入了,有时候有趣的表情同样能吸引住用户达到用户常驻的效果,当然,我们开发的时候不用去研究如何才能做到有趣,如何才能做到足够吸引用户,我们 ...