//
// main.m
// 第二个OC类 #import <Foundation/Foundation.h> @interface Person : NSObject
{
@public
int _age;
double _height;
double _weight;
}
- (void)eat:(char *)food;
- (void)sleep;
- (void)walk;
+ (void)demo;
@end
@implementation Person
- (void)eat:(char *)food
{
NSLog(@"吃%s", food);
}
- (void)sleep
{
NSLog(@"开始睡觉");
}
- (void)walk
{
NSLog(@"开始遛弯");
}
+(void)demo
{
NSLog(@"demo");
}
@end int main(int argc, const char * argv[]) { // 1.通过类创建对象
/*
内存区域分为:栈、堆、代码区(存放二进制代码)。
1.程序启动会把Person的代码放在代码区(Person的申明和实现的代码都在代码区了)。
2.new 创建对象会在堆中开辟存储空间给Person对象(有属性,属性初始化为0)。
3.指针名在栈中。存的是Persion对象的地址(堆中的地址)。(结构体的地址是第0个元素的地址) 4.创建对象的时候返回的地址其实就是类的第0个属性的地址,但是需要注意的是: 类的第0个属性并不是我们编写的_age, 而是一个叫做isa的属性(系统添加的第0个属性),isa是一个指针, 占8个字节。(结构体的地址是第0个元素的地址,类的本质就是结构体,所以类返回的地址就是第0个元素的地址。) 5.其实类也是一个对象, 也就意味着Person也是一个对象,平时我们所说的创建对象其实就是通过一个 类对象 来创建一个 新的对象,类对象是系统自动帮我们创建的(当Person类代码加载到代码区的时候系统就会根据这个代码创建一个Person类对象,类对象存放在堆区, 里面保存了当前对象的所有方法), 而实例对象是程序自己手动通过new来创建的, 而实例对象中有一个isa指针(第0个属性,is a是什么)就指向了创建它的那个类对象。p的地址就是isa的地址。 6.类方法:直接找到类对象,调用类方法。所以类方法执行的效率高。 */
Person *p = [Person new];
p->_age = ;
p->_height = 1.75;
p->_weight = 65.0; NSLog(@"age = %i , height = %f, weight = %f,isa = %p", p->_age, p->_height, p->_weight); NSLog(@"p = %p", p);//0x1002035e0
NSLog(@"&age = %p", &(p->_age));//0x1002035e8, p的地址和age的地址相差8就是isa占了8个字节,苹果的文档已经写的很清楚了。 [p walk];//首先找到栈中p的地址,然后找到p的地址指向的堆中person对象的地址,然后找到isa指针,然后找到Person类对象,然后找到walk方法。
[Person demo]; /////////////////////////////////////////////
struct Person
{
int age;
char *name;
};
struct Person sp;
NSLog(@"&sp = %p", &sp);
NSLog(@"&age = %p", &sp.age); //结构体的地址是第0个元素的地址,类的本质就是结构体,所以类返回的地址就是第0个元素的地址。 //////////////////////////////////////////// return ;
}

oc7--内存分析的更多相关文章

  1. iOS app内存分析套路

    iOS app内存分析套路 Xcode下查看app内存使用情况有2中方法: Navigator导航栏中的Debug navigator中的Memory Instruments 一.Debug navi ...

  2. 【Android端 APP 内存分析】使用工具进行APP的内存分析

    Android端可以通过adb 命令直接获取内存信息,当然Android studio也提供了对内存的监控分析工具,并且后续可以结合MAT做分析 今天介绍的是通过Android studio和MAT工 ...

  3. Chrome开发者工具之JavaScript内存分析

    阅读目录 对象大小(Object sizes) 对象的占用总内存树 支配对象(Dominators) V8介绍 Chrome 任务管理器 通过DevTools Timeline来定位内存问题 内存回收 ...

  4. Eclipse CDT Linux下内存分析 补记

    常用工具汇总 http://www.ibm.com/developerworks/cn/linux/l-cn-memleak/ 常用的内存分析工具 http://en.wikipedia.org/wi ...

  5. c中的进制与内存分析

    一. 进制 1. 什么是进制 l 是一种计数的方式,数值的表示形式 数一下方块的个数 汉字:十一   十进制:11  二进制:1011  八进制:13 l 多种进制:十进制.二进制.八进制.十六进制. ...

  6. [转载]JavaScript内存分析

    https://github.com/CN-Chrome-DevTools/CN-Chrome-DevTools/blob/master/md/Performance-Profiling/javasc ...

  7. iOS开发——高级篇——内存分析,Instruments

    一.内存分析 1.静态内存分析(Analyze)不运行程序,直接对代码进行内存分析,查看代码是否有内存泄露优点:分析速度快,并且可以对所有的代码进行内存分析缺点:分析结果不一定准确(没有运行程序,根据 ...

  8. 记一次Android内存分析过程

    前言 上周五的时候,祝峰找到我,反映了Android收银台买单结果页内存飙升的问题.我在自己的机器上也试着重现了一下,发现从支付台-微信支付成功并返回后,进入买单结果页的内存会突然增大,导致GC,如图 ...

  9. [原创]推荐一款强大的.NET程序内存分析工具.NET Memory Profiler

    [原创]推荐一款强大的.NET程序内存分析工具.NET Memory Profiler 1 官方网站:http://memprofiler.com/2 下载地址:http://memprofiler. ...

  10. 使用dotTrace6.0进行内存分析

    dotTrace6.0提供了内存分析功能,统计抓取的时间段内各个堆栈执行过程中使用的内存大小,按照堆栈执行情况树状排序:和它之前提供的时间统计类似,粗截了几个页面,希望对大家有所帮助. 下载安装Jet ...

随机推荐

  1. A题时遇到的一些技巧

    这篇主要是讲刷题时候遇到的一些技巧,该篇保持持续更新状态.. 1.求数组的长度:int a[]={,,,}; int n = sizeof(a)/sizeof(a[0]) 2.求想上取整,例如7/3 ...

  2. halcon 模板匹配 -- create_shape_model

    create_shape_model(Template : : //reduce_domain后的模板图像 NumLevels,//金字塔的层数,可设为“auto”或0—10的整数 AngleStar ...

  3. QT-Creator+SDK+编译器+自定义配置

    QT4.8的软件曾经耗费巨大的功夫进行构建,不舍得扔掉!重新安装Qt4.8版本 1.安装qt-creator 安装qt-creator-win-opensource-2.4.0.exe版本,不建议使用 ...

  4. css3基础篇一

    CSS3 选择器 选择器 例子 例子描述 CSS .class .intro 选择 class="intro" 的所有元素. 1 #id #firstname 选择 id=&quo ...

  5. (转)基于Metronic的Bootstrap开发框架经验总结(1)-框架总览及菜单模块的处理

    http://www.cnblogs.com/wuhuacong/p/4757984.html 最近一直很多事情,博客停下来好久没写了,整理下思路,把最近研究的基于Metronic的Bootstrap ...

  6. CorelDRAW关于使用鼠标的5个技巧分享

    CorelDRAW重度依赖者对快捷键和技巧性的操作爱不释手.本文我们介绍使用CorelDRAW关于鼠标操作的5个技巧,这是五种超快,非常有效,特别实用的技巧,如果每天的工作结合这些技巧的使用,效率会大 ...

  7. url 传参数时出现中文乱码

    1.前端通过 url 传递参数,但是参数又有中文,在下一个页面接受参数的时候中文会乱码 解决方案为: 定义和用法 decodeURI() 函数可对 encodeURI() 函数编码过的 URI 进行解 ...

  8. BZOJ 1594: [Usaco2008 Jan]猜数游戏 线段树 + 思维 + 二分

    Code: #include<bits/stdc++.h> #define maxn 3000000 using namespace std; void setIO(string s) { ...

  9. 修复Thinkphp框架5.0和5.1版本的远程代码执行安全漏洞

    由于框架对控制器名没有进行足够的检测会导致在没有开启强制路由的情况下可能的getshell漏洞.最直接的影响为index.php直接被篡改成首页html的内容! 5.0版本 thinkphp/libr ...

  10. eoLinker上线两周年+ AMS V4.0 发布:全新UI界面,带来领先的API开发管理解决方案!

    2018年7月,eoLinker 发布了<eoLinker AMS 2018年年中用户调研问卷>,前后经历一周的时间,共收集到超过1000份有效调查问卷.超过300个有效改进意见. eoL ...