文档章节

第01天OC语言(11):对象的内存存储细节

lyh2017iOS
 lyh2017iOS
发布于 2017/07/11 00:04
字数 503
阅读 1
收藏 0
点赞 0
评论 0

#####一、概念 #####二、代码


#import <Foundation/Foundation.h>
#pragma mark 类
/*
 要求定义一个人类
 事物的名称    : 人(Person)
 属性         : 年龄(age),身高(height),体重(weight)
 行为         : 吃饭(eat),睡觉(sleep),散步(walk)
 */
@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

#pragma mark main函数
int main(int argc, const char * argv[])
{
    
    // 1.通过类创建对象
    
    /*
     1.开辟存储空间, 通过new方法创建对象 会在 堆 内存中开辟一块存储空间
     2.初始化所有属性
     3.返回指针地址
     
     创建对象的时候 返回的地址 其实就是类的第0个属性的地址
     但是 需要注意的是 : 类的第0个属性 并不是我们编写的 _age, 而是一个叫做isa的属性
     isa 是一个指针, 占8个字节
     
     其实类也是一个对象, 也就意味着 Person 也是一个对象
     平时 我们所说的创建对象 其实就是通过一个 类对象 来创建一个 新的对象
     类对象 是系统自动帮我们创建的,里面保存了当前 对象的所有方法
     而,实例对象是程序员 手动通过new来创建的,而实例对象 有一个isa指针 就指向了 创建它的那个类对象
     */
    
    Person *p = [Person new];
    p->_age = 25;
    p->_height = 1.71;
    p->_weight = 65;
    NSLog(@"p = %p",p);
    NSLog(@"&age = %p",&(p->_age));
    /*
    p = 0x100102660
    &age = 0x100102668
     */
    NSLog(@"age = %i, height = %f,weight = %f",p->_age,p->_height,p->_weight);
    
    
    [p walk];
    [Person demo];
    
    /*
    struct Person
    {
        int age;
        char *name;
    };
    
    struct Person sp;
    NSLog(@"&sp = %p",&sp);
    NSLog(@"&age = %p",&sp.age);
     */
    
    
    // 每次 new 都会 创建一个新的对象, 分配一块新的存储空间
    // 如果 修改A的属性 不会影响到 B的属性
    // 一个类 可以创建多个对象
    Person *p2 = [Person new];
    p2->_age = 33;
    p2->_height = 1.73;
    p2->_weight = 68;

    return 0;
}

image.png

© 著作权归作者所有

共有 人打赏支持
lyh2017iOS
粉丝 1
博文 354
码字总数 137380
作品 0
朝阳
Effective objective-C 读书笔记 (第一部分)

第1章 熟悉Objective-C 第1条 了解Objective-C语言的起源 Objective-C是一种“消息结构”的语言,而非“函数调用”语言。 关键区别在于:使用消息结构的语言,其运行时所执行的代码由运行环境...

shenglanya ⋅ 2017/12/05 ⋅ 0

OC . 语法

一、点语法作用 1、方便其他语言程序员很快转到OC开发 2、程序设计简单化 3、隐藏了内存管理细节 4、隐藏多线程、同步、加锁细节 当然是使用点语法 . 还是实用中括号的方式 [** **],随个人喜...

Cy_Star ⋅ 2017/10/17 ⋅ 0

Swift4.0基础知识回顾

简单介绍一下Swift Swift 语言由苹果公司在 2014 年推出,用来撰写 OS X 和 iOS 应用程序,Swift语言让应用开发更简单、更快、更稳定,确保最终应用有着更好的质量更多了解Swift可以去《The...

博行天下 ⋅ 2017/12/06 ⋅ 0

C/OC/Swift的数据类型没那么简单

数据类型决定了值如何存储到计算机内存中。在声明变量时也可指定它的数据类型。不同数据类型来存储不同的信息,所有变量都具有数据类型,以决定能够存储哪种数据。 C语言 C语言的基本数据类型...

CoderDancer ⋅ 2017/08/10 ⋅ 0

iOS中的内存管理(下)

首先来看一个参数:@property(详见:http://my.oschina.net/aofe/blog/265789) @property在内存管理中的作用: 1、可以控制set方法的内存管理; 1> retain:release旧值,retain1新值(用于...

傲风凌寒 ⋅ 2014/05/21 ⋅ 0

OC基础学习:对象在内存中是如何存储的?

例: 会在栈内存中申请一块空间,在栈内存中声明1个Person类型的指针变量p1。p1是一个指针变量,那么只能存储地址。 真正在内存中创建对象的其实是这句代码。 new方法在堆内存中创建一块合适...

Andy_Ron ⋅ 2017/10/26 ⋅ 0

iOS SEL~存储位置、原理

//联系人:石虎 QQ:1224614774 昵称:嗡嘛呢叭咪哄 一、概念 1.SEL类型是OC中用来定义方法的关键字,和其他语言不同的是SEL类型虽然是方法定义,但却不从属于任何类实例,其值是通过@selector...

石虎132 ⋅ 01/14 ⋅ 0

iOS-Foundation框架中常用的类

Foundation框架中最常用的类。 Foundation框架中最我们经常用的类大致有NSString、NSArray、NSDictionary等等,虽然不需要将每一个类中提供了什么方法都记下来,但是需要做到心中有数,知道F...

xx_cc ⋅ 2016/10/25 ⋅ 0

oc 类和对象

一 、oc语言的特点 C语言的超集,允许在oc中使用c语言源代码,编译器兼容C语言程序 具备完善的面向对象特性 包含一个运行时系统 类库丰富 二、基本介绍 面向对象编程OOP(Object Oriented Pro...

黑伞将军 ⋅ 2015/08/03 ⋅ 0

OC-基础总结(一)

OC基础总结 重新回过头看这些基础知识,对许多知识点都有新的认识,拥有坚实的基础才能更快的成长。 #improt OC程序的源文件的后缀名是.m m代表message表示消息机制。main 仍然是OC程序的入口...

xx_cc ⋅ 2017/04/22 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

2018上海云栖大会workshop-日志数据采集与分析对接

摘要: 日志数据采集与分析对接 课程描述 通过日志服务采集用户、数据库、业务等访问数据。演示对于业务日志分析与处理,程序日志查询与监控,打通日志与数据仓库对接案例。 日志种类 网站访...

猫耳m ⋅ 24分钟前 ⋅ 0

SpringMVC中的ContentNegotiatingViewResolver配置

pom.xml <properties><commons-lang.version>2.6</commons-lang.version><slf4j.version>1.7.6</slf4j.version><spring.version>4.1.3.RELEASE</spring.version> <jack......

颖伙虫 ⋅ 27分钟前 ⋅ 0

Spring Boot 2.0正式发布,升还是不升呢?

Spring几乎是每一位Java开发人员都耳熟能详的开发框架,不论您是一名初出茅庐的程序员还是经验丰富的老司机,都会对其有一定的了解或使用经验。在现代企业级应用架构中,Spring技术栈几乎成为...

java高级架构牛人 ⋅ 27分钟前 ⋅ 0

打包时隐藏打印日志

1.打包时不允许项目中有打印的日志,可以在pch中加入下面这段代码即可 #ifdef DEBUG# define Log(fmt, ...) NSLog((@"%s [Line %d] " fmt), __PRETTY_FUNCTION__, __LINE__, ##__VA...

小黑202 ⋅ 29分钟前 ⋅ 0

SSL双向认证的实现

环境 系统:archlinux/centOS nginx:nginx/1.12.2 浏览器:火狐firefox 前提:1.安装nginx。    2.安装openssl。 生成证书 新建工作目录  首先建立一个工作目录,这里以我的工作目录为例...

颖辉小居 ⋅ 34分钟前 ⋅ 0

vscode 代码格式化,语法检查插件ESLint+Prettier

ESLint+Prettier prettier只关注格式化 ,插件prettier-vscode,编辑器的配置setting.json会出现prettier插件的相关配置节点,同时也能看到一些默认的配置信息。 安装成功后,编辑器默认的格式...

momo1987 ⋅ 37分钟前 ⋅ 0

使用TinyProxy搭建代理服务器

什么是TinyProxy 它是一个代理服务器,用来实现http或https代理,windows系统一直在用ccproxy, 非windows系统,怎么开放个http代理呢?那就是TinyProxy。 安装 直接执行命令即可 sudo apt-g...

bengozhong ⋅ 37分钟前 ⋅ 0

掌握需求过程

1,需求必须可度量、可测试 2,需求是什么? 功能需求 非功能需求 限制条件 3,Volere需求过程 采用Volere需求过程,最好采用RUP,增量,迭代,螺旋,Scrum或其他类似的迭代式开发过程 (注意...

霜叶情 ⋅ 41分钟前 ⋅ 0

分布式微服务云架构开发Web应用

举一个简单的例子,在快速入门工程的基础上,举一个简单的示例来通过Thymeleaf渲染一个页面。 @Controller public class HelloController { @RequestMapping("/") pub...

明理萝 ⋅ 43分钟前 ⋅ 0

图应用之关键路径(Critical Path)

之前我们介绍过,在一个工程中我们关心两个问题: (1)工程是否顺利进行 (2)整个工程最短时间。 之前我们优先关心的是顶点(AOV),同样我们也可以优先关心边(同理有AOE)。(Activity ...

临江仙卜算子 ⋅ 44分钟前 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部