zoukankan      html  css  js  c++  java
  • OC类的介绍

    类的本质

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

      

    类对象的获取

     1 1)通过实例对象获取
     2     Dog  *dog =[Dog new];
     3     Dog *d2 = [Dog new];
     4 
     5       //第一种方法获取类对象
     6     Class c =[dog class];
     7     Clsss c2 =[d2 class];
     8 
     9     NSLog(@"%p",c);
    10     NSLog(@"%p",c2);
    11 
    12 2)通过类名获取(类名其实就是类对象)
    13 
    14      Class c3=[Dog class];
    15      NSLog(@"%p",c3);

      

    类对象的使用

     1 原来使用类名可以做哪些事情?
     2     创建对象
     3     [Person new];
     4     调用类方法
     5     [Person test];//test是类方法
     6 
     7  Person *p =[Person new];
     8   
     9  
    10 
    11  c1---->Person
    12 
    13   类对象的使用
    14   Class c1 =[p class];    //Person
    15   1)创建实例对象
    16   Person *p1= [c1 new];
    17   2)调用类方法
    18  [p test]; 调用的是实例方法 -动态的
    19    [c1 test]调用的是类方法 +静态的

      

    SEL类型

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

      

  • 相关阅读:
    Java GUI图形界面开发工具
    python操作MySQL数据库
    国外五大股票交易系统及其源码
    五个抄底摸高的交易系统和源代码
    海龟交易系统源码
    模式识别话题
    几种常见模式识别算法整理和总结
    比较好的开源人脸识别软件
    利用开源程序(ImageMagick+tesseract-ocr)实现图像验证码识别
    JSONObject与JSONArray的使用
  • 原文地址:https://www.cnblogs.com/developer-wang/p/4500166.html
Copyright © 2011-2022 走看看