李洪强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 studio实现Service AIDL
今天要开发过程中要用到AIDL的调用,之前用的eclipse有大量教程,用起来很方便,现在刚换了Android studio,不可否认studio真的很强大,只是很多功能还需要摸索. AIDL(And ...
- WinFrom下连接字符串的数据库文件路径问题
一直以为连接字符串中的系统变量|DataDirectory|就是在ASP.NET中代替App_Data的绝对路径.原来在WinForm程序中也能用|DataDirectory|,不过指代的是exe文件 ...
- SVN四部曲之SVN使用详解进阶
SVN简介: 为什么要使用SVN? 程序员在编写程序的过程中,每个程序员都会生成很多不同的版本,这就需要程序员有效的管理代码,在需要的时候可以迅速,准确取出相应的版本. Subversion是什么? ...
- Android系统SVC命令教程
svc命令,位置在/system/bin目录下,用来管理电源控制,无线数据,WIFI # svc svc Available commands: help Show information about ...
- c/c++常用代码--清空目录
#pragma once #include <io.h>#include <stdio.h>#include <string>#include <direct ...
- [转]unable to resolve superclass of 的奇怪问题和一种解决方法!
[转]unable to resolve superclass of 的奇怪问题和一种解决方法! http://blog.csdn.net/jackymvc/article/details/90015 ...
- View模版的设计
一个Action多套View模版的设计 回到目录 模块化 这个问题是在做模块化设计时出现的,在Lind.DDD.Plugins模块里,需要对应的模块实体,模块管理者,模块标识接口等,开发时,如果你 ...
- libreoffice转换文档的方法(支持各平台各版本的libreoffice)
前段时间完成了一个利用libreoffice转换文档进行预览的资源管理系统,用的是jodconvert这个多年未更新的转换项目,由于版本不兼容等原因,导致最新版的libreoffice不能用,浪费了许 ...
- TI的AM3359的sd卡分区以及sd卡启动说明
[1]sd 卡分区: ti提供了自己的分区shell脚本create-sdcard.sh 脚本目录在:ti-sdk-am335x-evm-05.06.00.00/bin/ (1)插入sd卡(若是笔记 ...
- 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。
// ConsoleApplication2.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include "stdafx.h ...