李洪强iOS开发之OC[014] -对象的存储细节
//
// main.m
// 13 - 对象的存储细节
//
// Created by vic fan on 16/7/9.
// Copyright © 2016年 李洪强. All rights reserved.
//
#import <Foundation/Foundation.h>
问题 1 :
[person new]
做了哪三件事情?
1 申请了内存空间
2 初始化类中的实例变量
3 返回对象的内存地址
问题 2 :
[person new] 创建的对象在内存的哪个区?
堆区
问题 3: 实例变量存储在内存的哪个区
实例变量存储在内存的堆区 指针p存储在栈区
问题 4 [p run] 是怎么调用的?
先去找堆区的对象,再去找isa指针,有了isa指针,才能找到
代码区的类(Person),找类中所存贮的方法.
isa 指针是对象中的隐藏指针,指向创建这个对象的类
--------------------------------
分析:
Person *p = [Person new];
等号左边:
Person类 程序会在3代码区开闭一块内存
定义一个指针: 在栈区(P指针是局部变量)
等号右边:
1 在堆区申请内存空间
2 初始化实例变量
1栈区 2堆区 -----> 3代码区 内存地址: ox111
person类中的所有代码
P指针 isa指针 实例变量:
_name = null _name;
_age = 0 _age;
方法:
_run{
}
并没有开辟内存
发送一个消息就是调用方法
底层是C语言的,在调用一个函数 obj_msgsend
一个类可以创建多个对象,但是每个对象的地址不是相同的
*/
@interface Person : NSObject{
@public
//定义实例变量
NSString *_name;//姓名
int _age;//年龄
}
//方法的声明;
- (void)run;//人跑的方法的声明
@end
//类的实现
@implementation Person
//方法的实现
- (void)run{
NSLog(@"周杰伦的床边故事");
}
@end
int main(int argc, const char * argv[]) {
@autoreleasepool {
Person *p = [Person new];
p->_age = 12;
p->_name = @"李洪强";
//调用方法
[p run];
}
return 0;
}
最新文章
- 通过一个demo了解Redux
- Java概述
- PhpStorm 相关激活方式
- 关于xml的使用。
- phonegap之android原生日历调用
- 关于lwip移植到ucsos-ii平台的遇到的问题(一)
- centos 防火墙设置
- Debian下安装deb格式安装包
- 初识view
- NET知识大纲
- C++的三大特性之一继承
- JDBC与反射
- The most interesting feature of iPhone X - FaceID
- composer包(发布到github上)同步到Packagist
- python 单例实现
- 找出程序GasMileage中的哪一行与下列叙述相对应:
- python基础一 -------如何在列表字典集合中根据条件筛选数据
- [转]list的交集,差集,并集
- Python while 循环
- Windows:添加、删除和修改静态路由
热门文章
- lnmp下配置虚拟主机
- Android发送请求到不同的Servlet,但都是一个Servlet处理
- 使用tortoise git管理gitolite版本库
- liunx下vi命令详解
- asp.net 生成PDF方法
- 5、WPF实现简单计算器-非常适合初学者练习
- innobackupex:Error:xtrabackup child process has died at /usr/bin/innobackupex
- MySQL在ROW模式下通过binlog提取SQL语句
- 【转载】 使用Anemometer基于pt-query-digest将MySQL慢查询可视化
- WCF-Configuration