李洪强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;
}
李洪强iOS开发之OC[014] -对象的存储细节的更多相关文章
- 李洪强iOS开发之OC[018]对象和方法之间的关系
// // main.m // 18 - 对象和方法之间的关系 // // Created by vic fan on 16/7/14. // Copyright © 2016年 李洪强. A ...
- 李洪强iOS开发之OC[003] - 用钥匙串存储信息模拟登陆
- 李洪强iOS开发之OC常见错误汇总
// // main.m // 16 - 常见错误汇总 // // Created by vic fan on 16/7/13. // Copyright © 2016年 李洪强. All r ...
- 李洪强iOS开发之OC[017]函数和方法的区别
// // main.m // 15 - 函数和对象的方法的区别 // // Created by vic fan on 16/7/12. // Copyright © 2016年 李洪强. ...
- 李洪强iOS开发之OC[008] -创建一个对象并访问实例变量
// // main.m // 07 - 创建一个对象并且访问实例变量 // // Created by vic fan on 16/7/3. // Copyright © 2016年 李洪强 ...
- 李洪强iOS开发之OC[010] - 有参方法的声明实现和调用
// // main.m // 09 - 有参方法的声明实现和调用 // // Created by vic fan on 16/7/5. // Copyright © 2016年 李洪强. ...
- 李洪强iOS开发之OC[015]#pragma mark的使用
// // main.m // 14 - #pragma mark的使用 // // Created by vic fan on 16/7/10. // Copyright © 2016年 李 ...
- 李洪强iOS开发之OC[013] -类的创建的练习
// // main.m // 12 - 类的创建练习 // // Created by vic fan on 16/7/9. // Copyright © 2016年 李洪强. All ri ...
- 李洪强iOS开发之OC[012] -类的声明实现小结
// // main.m // 11 - 内容总结 // // Created by vic fan on 16/7/9. // Copyright © 2016年 李洪强. All righ ...
随机推荐
- Android AdapterView.OnItemSelectedListener
AdapterView.OnItemSelectedListener Summary Public Methods abstract void onItemSelected(AdapterView&l ...
- [Apache] 2.2与2.4版本在设置虚拟域名时的小差别
Apache服务器配置虚拟步骤: 1.在httpd.conf中将附加配置文件httpd-vhosts.conf包含进来,接着在httpd-vhosts.conf中写入如下配置: #LoadModule ...
- $(document).height()、$("body").height()、$(window).height()区别和联系
前言:在此以高度为示例,宽度问题可类推.在移动端开发中,经常遇到需要把一块内容定位于底部的情况,当页面内容不满一屏时,需要设为fixed,而超过 一屏时,需要设为static随页面顶到底部,此时就需要 ...
- Nginx+Keepalived实现高可用站点
Keepalived是一个基于VRRP协议来实现的服务高可用方案,可以利用其来避免IP单点故障,类似的工具还有heartbeat. corosync.pacemaker.但是它一般不会单独出现,而是与 ...
- SQL Server 2008中新增的变更数据捕获(CDC)和更改跟踪
来源:http://www.cnblogs.com/downmoon/archive/2012/04/10/2439462.html 本文主要介绍SQL Server中记录数据变更的四个方法:触发器 ...
- laravel框架少见方法详解
1.whereDate() 方法 $q->where('created_at', '>=', date('Y-m-d').' 00:00:00')); 以前查数据时,直接用where条件来 ...
- 删除select中所有option选项jquery代码
select中所有option选项如何删除,本文使用jquery简单实现下,有此需求的朋友可以参考下,希望对大家有所帮助. 这样写 复制代码代码如下: <select id="sear ...
- Windows 注册表 (未完成)
由于最近需要用到注册表,并且操作很多系统设置,所以想吧关于微软注册表的东西都写出来,找了很久才发现,微软对于注册表做了很详细的说明,但是为了节省时间翻译文本为自动翻译,手动纠错,欢迎大家指出错误. 根 ...
- Flex xxx-app.xml配置
<?xml version="1.0" encoding="UTF-8"?> <application xmlns="http:/ ...
- SetTimeOut jquery的作用
1. SetTimeOut() 1.1 SetTimeOut()语法例子 1.2 用SetTimeOut()执行Function 1.3 SetTimeOut()语法例子 1.4 设定条件使SetTi ...