类的本质 Objective-C基础
1.内存中的五大区域
栈
堆
BSS段
数据段
代码段
代码段 是用来存储代码的
类加载 当类第1次 被访问的时候 这个类就会被加载到代码段存储起来
2 讨论问题
类什么时候加载到代码段
类第1次被访问的时候类就会被加载到代码段存储 类加载
类以什么样的形式存储在代码段
类一旦被加载到代码段之后 什么时候回收
是不会被回收的除非程序结束
1 任何存储在内存中的数据都1个数据类型
int num =12;
float 12,2f;
‘a’
任何在内存中申请的空间也有自己家的类型
Perosn *p1 =[Person new];
- 在代码段存储类的那块空间是个什么类型的
在代码段中存储类的步骤
a 先在代码段中创建1个Class对象 Class是Foundation框架中的1个类
b 把类的信息存储在这个Class对象之中
这个Class 对象 至少有3个属性
类名存储这个类的名称
属性s存储这个类的具体的哪些属性
方法s 存储这个类的具体的哪些方法
所以类是以Class 对象的形式存储形式存储在代码段的
存储类的这个Class 对象 我们叫做类对象
用来存储类的1个对象
所以存储类的类对象也有1个叫做isa指针的属性
这个指针指向存储父类的类对象。
4 如何拿到存储在代码段的中的类
- 调用类的类方法 class 就可以得到存储类的类方法
- 调用对象的对象方法 class 就可以得到存储这个对象的所属的类的Class对象的地址。
3) 对象中的isa指针的值其实就是代码段中存储类的的类对象的地址
注意
声明Class 指针的时候 不需要加* 因为在typedef 的时候就已经加了*了。
5.如何使用类对象
1) c1 指的是 存储Person类的类对象
Class c1 =[Person class];
c1 对象就是Person类
c1 完全等价于Person
2) 使用类对象来调用类方法。
因为类对象就代表存储这个类对象中类
Class c1 = [Person class];
c1 就代表Person类
所以在使用Person的地方完全可以使用c1代替
比如我们使用类名来调用类方法
[Person sayHi];
完全可以使用c1来调用 因为c1就是Person
[c1 sayHi];
Class c1 = [Person class];
第二种创建对象的方法
Person *p1 = [c1 new];
4) 注意使用类对象
只能使用类的类方法 因为类的机械就等价于存在其中的类
不能调用对象方法。
1类是以Class 对象的形式存储在代码段中的
2 如何拿到存储类的类类对象
3 有什么用
可以使用类对象调用类的类方法
要调用Person的类方法 可以使用Person调用。
- Person *p1 =[Person new];
Class c1=[Person class];
Person *p1 =[Person new];
Person *p1 =[c1 new];
[Class c1 =[Person class];
NSLog(@“c1 = %p”,c1);
Person *p1 = [Person new];
Class c2 = [p1 class];
NSLog(@“c1 = %p”,c2);
类的本质 Objective-C基础相关推荐
- Objective-C基础学习笔记(七)-类的本质与SEL
一.分类-Category 1.思考:如何在不改变原来类的模型的前提下,扩展分类的方法? 两种方式: 1>继承:子类可继承父类原有的方法,并且增加自己的方法. 2>分类; 可以给某个类扩 ...
- 茶的分类计算机基础知识,【收藏】六大茶类的本质区别,看这篇就够了!(附茶叶分类图)...
原标题:[收藏]六大茶类的本质区别,看这篇就够了!(附茶叶分类图) 其实六大茶类的划分标准和本质区别在于,制作工艺和茶叶中茶多酚的氧化程度.接下来就按茶叶发酵程度由低到高排序,简要介绍各类茶之间的区别 ...
- id、构造方法、Category 分类、类的本质、description方法、SEL
1.id: 万能指针id :id对象不能用点语法.id对象本身已经有 * 了 因此变量名不能有 * . 可以吧id理解为 NSObject * 类型数据! int main() { @autorele ...
- 计算机视觉中本质矩阵的概念,【计算机视觉】Lecture 19:本质矩阵和基础矩阵...
对极几何 左边 极点:相机1所看到的相机2的位置. 右边 极点:相机2所看到的相机1的位置 对极几何 对应点位于共轭极线上 对极几何 给定一幅图像中的一个点,我们如何确定在第二幅图像中要搜索的对应极线 ...
- 浅析编程及类的本质、类的抽象
现阶段编程语言极大丰富,以编程思想大致分为面向过程和面向对象两类,前者以C语言作为代表,编程以过程为中心,符合编程人员的直观逻辑,便于理解:后者有C++.C#.Java等,编程以对象为基本程序结构单元 ...
- 微信小程序提交审核时提示:“ 小程序页面内容涉及账户充值服务,需补充商家自营-预付卡销售-发行方类目。请在基础信息处申请该类目”的解决方法
微信小程序在多次提交审核时,出现这个提示: 1: 小程序页面内容涉及账户充值服务,需补充商家自营-预付卡销售-发行方类目.请在基础信息处申请该类目,通过资质审核并在配置功能页添加符合该类目的功能页面. ...
- 一个印度人写的VC串口类CSerialCom(有串口基础介绍)
http://www.vc-rs232.com/html/VC_SSCOM_Control/2011/0117/34.html 一个印度人写的VC串口类CSerialCom(有串口基础介绍) 软件介绍 ...
- JAVA类与对象构造方法,java基础-1-面向对象(1)-概念介绍与类、对象、构造方法...
-------android培训.java培训.期待与您交流! ---------- 什么叫做面向对象? 想要了解什么事面向对象,我们首先需要了解,什么是面向过程. 所谓的面向过程,指的是在编程期间, ...
- 虚函数之定义一个基类Shape,在此基础上派生出Rectangle和Circle再使用Rectangle类创建一个派生类Square。
定义一个基类Shape,在此基础上派生出Rectangle和Circle,二者都有getArea( )函数计算对象的面积,再使用Rectangle类创建一个派生类Square.将getArea()改造 ...
- 视觉SLAM中,本质矩阵、基础矩阵、单应性矩阵自由度和秩分析
视觉SLAM中,本质矩阵.基础矩阵.单应性矩阵自由度和秩分析 1.各个矩阵的自由度 由于基础矩阵和本质矩阵都是由对极约束来的 1.1 本质矩阵E的自由度为5,秩为2 1.1.1 自由度: 首先,旋转和 ...
最新文章
- Spread for Windows Forms高级主题(5)---数据处理
- Pycharm解决中文字体大小不一致问题
- Prime Count 求大区间素数个数
- SAP Spartacus如何启用B2B feature
- CRM数据库表COM_TA_R3_ID的数据来源
- 前端学习(548):node的自定义模块
- jsp+左间距_DIV间距设置
- wireshark_Couldn’t run /usr/sbin/dumpcap in child process: Permission denied
- PHP新闻管理系统(包括前台后台)
- GLASS数据的批量下载(以植被覆盖度FVC为例)
- 太阳能逐日自动跟踪系统实训装置QY-T28
- 计算机专业的在职考研,2019年深造北京航空航天大学在职研究生计算机专业在职考研科目是什么...
- 坑爹!攻城狮老爸被苹果解雇 只因女儿晒iPhone X
- 【DKN】(四)train.py
- 解决ngress-nginx-controller 报错问题
- mac 爱普生打印机驱动_epson l360 mac版驱动下载-爱普生l360驱动Mac版最新版 - 极光下载站...
- ARM芯片tops的计算方法
- pip安装Cartopy小白版
- 手机java安装_花样繁多 MOTO手机JAVA程序安装详细步骤
- 云计算、Web2.0、SOA、SaaS、SNS到底是不是笑话?
热门文章
- mysql 360怎么安装_MySQL安装方法
- linux卸载已安装的java_Linux 中如何卸载已安装的软件(转载)
- vivo手机解锁工具_点燃解锁的多一份激情,vivo NEX双屏版解锁体验报告
- unsigned short占几个字节_ARM中,字、半字、字节分别是多少位?
- python hsv inrange 范围_仅20行代码,用python给证件照换底色
- html for循环正方形,JavaScript for 循环
- java简单计算器课程设计_java仿windows简易计算器课程设计 源码+报告
- jboss linux 性能,搭建jprofiler对jboss性能监控
- python seach_python 正则re.search
- java登陆界面工具_javaee编写登陆界面