//
// 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. python--6、re模块

    re模块 用于在正则表达式匹配操作. python中为了避免实现输出'\','\n'字符的转义问题(如正则表达式使用反斜杠" \ "来代表特殊形式或用作转义字符,这里跟Python ...

  2. Matlab移植到Eigen用到的词条

    同型矩阵运算满足加法交换律.结合律:并存在单位元.逆元.和0元,为同型矩阵对加法的交换环. Eigen的简单运算参考:http://blog.163.com/jiaqiang_wang/blog/st ...

  3. VTK嵌入MFC同步显示

    使用VTK嵌入MFC,实现四视图更新,机制和细节参考原文. 原文链接:http://blog.csdn.net/www_doling_net/article/details/8939115 原文代码: ...

  4. appium处理app与web页面的转换

      测微信页面的时候使用谷歌app,进入微信页面的链接 def setUp(self): print("set up env for android testing...") se ...

  5. [Advanced Algorithm] - Validate US Telephone Numbers

    题目 如果传入字符串是一个有效的美国电话号码,则返回 true. 用户可以在表单中填入一个任意有效美国电话号码. 下面是一些有效号码的例子(还有下面测试时用到的一些变体写法): 555-555-555 ...

  6. [iOS Reverse]logify日志追踪,锁定注入口-控制台查看

    前言 logify是theos的一个组件,路径是: /opt/theos/bin/logify.pl 我们还是以微信红包为例子,根据[iOS Hacking]运行时分析cycript得到的入口文件: ...

  7. 初探CORBA组件化编程

    1.掌握组件化开发的概念,了解CORBA模型及ORB机制:2.掌握CORBA组件编程方法.二.实验内容(一).步骤1.配制环境JDK环境.2.编写编译IDL接口.3.编写编译服务端程序.4.编写编译客 ...

  8. day001 Python 计算机基础(2019年5月16日)

    &nbsp&nbsp&nbsp&nbsp&nbsp&nbsp作为一名程序员或者即将踏入IT行业的准程序员,学习任何一门编程语言,都需要有基本的计算机基础 ...

  9. 【剑指Offer】8、跳台阶

      题目描述:   一只青蛙一次可以跳上1级台阶,也可以跳上2级.求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果).   解题思路:   首先考虑最简单的情况,如果只有1级台阶, ...

  10. Django解决跨域俩方案

    方案一:一套干掉全部Primary 首先你的pip下载一个第三方库贼厉害的: pip install corsheaders 然后在项目的setting.py里面引入第三方库,如下: INSTALLE ...