李洪强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发展史:从iPhone OS 1.0到iOS10 终于支持骚扰拦截了
- 高仿ios斗鱼界面
- 损失37亿!Intel将彻底退出傲腾存储业务;支付宝新增一键取消「自动扣款」功能;iOS 15.5验证通道关闭|极客头条
- 9月3日科技资讯|Google 公开被利用了两年的 iOS 漏洞;微博新推社交产品“绿洲”;微软全新终端 v0.4 发布
- iOS应用数据存储的经常使用方式
- ios 沙盒 NSCoding(相当于JAVA对象序列化) 归档 数据存储
- IOS 开发环境,证书和授权文件
- IOS之分析网易新闻存储数据(CoreData的使用,增删改查)
- WebRTC系列---iOS平台接口介绍及demo示例(2)
- iOS中 高仿Tumblr热度-滚动条数-JQScrollNumberLabel 韩俊强的博客
- iOS中 Swift初级入门学习(三)
- iOS 要定义自己的导航栏button样式Button Image 执行出彩是不一样的与原来的颜色 -解
- About RadaeePDF Classic SDK for iOS Crack
- IOS #ifdef 的那些事儿
- iOS开发网络篇—数据缓存
- 李洪强iOS开发之零基础学习iOS开发】【02-C语言】01-概述
- iOS图片上传及处理