黑马程序员-------OC----对象存储
来源:互联网 发布:java计算器程序源代码 编辑:程序博客网 时间:2024/06/14 15:53
——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——-
在OC中,当我们通过实例化一个类的对象时,该对象在内存中的存储细节为:
可以看到,对象首地址保存在栈区的变量p中,在堆区分配的对象空间中,有一个隐藏的_isa指针,指向了内存代码区的对象所属的类。
每个实例对象都有一个isa指针,这个指针指向当前对象所属的类
[p run]表示给p所指向的对象发送一条run消息,调用对象的run方法,此时对象会顺着内部的isa指针找到存 储于类中的方法,执行
通过isa指针我们可以在运行的时候知道当前对象是属于哪个Class(类)的
类对象存储类的成员变量和方法声明
再看一段代码:
NSString* s;s = [[NSString alloc] initWithString:@"hello world"];
这是一段最简单的字符串定义,但是看似简单,其实有很多东西可能会被忽略掉
这里的s其实是个指针,在oc中除了基本数据类型之外的变量类型都是指针类型,oc的对象也是通过指针进行操作的。
在第一段代码定义了NSString类型的指针变量,但是并没有指向任何对象,第二段代码alloc一个NSString对象 然后使s指向它,并通过s开始其的后续操作。
这里s的内存空间在栈内存中,“hello world”在堆内存中。
可以看出,oc中创建的对象指针存储在栈内存中,而alloc出来的对象的内存在堆内存中,栈内存中的指针通过赋值指向堆内存中的对象,然后通过栈内存中的指针访问对象及其变量,也就是说,其实我们在创建一个对象时其实是利用了两个部分的内存空间。
0 0
- 黑马程序员-------OC----对象存储
- 黑马程序员------OC中对象的存储细节
- 黑马程序员---oc--面向对象
- 黑马程序员--OC自学笔记---02对象存储细节、NSString简介、多文件开发
- 黑马程序员---OC类和对象
- 黑马程序员--oc:面向对象语法
- [黑马程序员][OC]面向对象-思想
- 黑马程序员-OC的面向对象
- 黑马程序员一OC面向对象语法
- 黑马程序员--OC-类与对象
- 【黑马程序员】-oc中对象的封装
- 黑马程序员 OC基础: 面向对象(一)
- 黑马程序员IOS-OC语言-面向对象
- 黑马程序员--OC类和对象
- 黑马程序员-OC语言-类和对象
- 黑马程序员---OC基础---类和对象
- 黑马程序员------OC 对象和类
- 黑马程序员-----OC学习之类与对象
- 面试总结
- hdu 5441 Travel(并查集应用)
- Code Review
- 公開課
- 第八课 混合
- 黑马程序员-------OC----对象存储
- @Override错误(转)
- Sqlite3—IOS成长之路
- 杨辉三角求二项式分布
- 网站测试
- iOS如何获取iOS app的资源包
- Android Handler机制
- android dp
- java学习之System类