文档章节

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

lyh2017iOS
 lyh2017iOS
发布于 2017/07/11 00:04
字数 503
阅读 1
收藏 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
博文 357
码字总数 137380
作品 0
朝阳
iOS 编写高质量Objective-C代码(二)

《编写高质量OC代码》已经顺利完成一二三四篇! 附上链接: iOS 编写高质量Objective-C代码(一) iOS 编写高质量Objective-C代码(二) iOS 编写高质量Objective-C代码(三) iOS 编写高质量...

MrLiuQ
08/13
0
0
Effective objective-C 读书笔记 (第一部分)

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

shenglanya
2017/12/05
0
0
OC . 语法

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

Cy_Star
2017/10/17
0
0
Swift4.0基础知识回顾

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

博行天下
2017/12/06
0
0
C/OC/Swift的数据类型没那么简单

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

CoderDancer
2017/08/10
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Shiro | 实现权限验证完整版

写在前面的话 提及权限,就会想到安全,是一个十分棘手的话题。这里只是作为学校Shiro的一个记录,而不是,权限就应该这样设计之类的。 Shiro框架 1、Shiro是基于Apache开源的强大灵活的开源...

冯文议
23分钟前
0
0
linux 系统的运行级别

运行级别 运行级别 | 含义 0 关机 1 单用户模式,可以想象为windows 的安全模式,主要用于修复系统 2 不完全的命令模式,不含NFS服务 3 完全的命令行模式,就是标准的字符界面 4 系统保留 5 ...

Linux学习笔记
今天
2
0
学习设计模式——命令模式

任何模式的出现,都是为了解决一些特定的场景的耦合问题,以达到对修改封闭,对扩展开放的效果。命令模式也不例外: 命令模式是为了解决命令的请求者和命令的实现者之间的耦合关系。 解决了这...

江左煤郎
今天
3
0
字典树收集(非线程安全,后续做线程安全改进)

将500W个单词放进一个数据结构进行存储,然后进行快速比对,判断一个单词是不是这个500W单词之中的;来了一个单词前缀,给出500w个单词中有多少个单词是该前缀. 1、这个需求首先需要设计好数据结...

算法之名
昨天
15
0
GRASP设计模式

此文参考了这篇博客,建议读者阅读原文。 面向对象(Object-Oriented,OO)是当下软件开发的主流方法。在OO分析与设计中,我们首先从问题领域中抽象出领域模型,在领域模型中以适当的粒度归纳...

克虏伯
昨天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部