美文网首页
类与对象

类与对象

作者: Maxmin | 来源:发表于2016-01-08 20:54 被阅读61次

    类型系统

    • 引用类型

      • 类 class
      • 指针 pointer
      • 块 block
    • 值类型 value type

      • 基础数值类型
      • 结构 struct
      • 枚举 enum
    • 类型装饰

      • 协议 protocol
      • 类别 category
      • 扩展 extension

    类 class VS. 结构 struct

    • 类型与实例

      • 类与对象
      • 结构与值
    • 类——引用类型

      • 位于栈上的指针(引用)
      • 位于堆上的实体对象
    • 结构——值类型

      • 实例直接位于栈中
    • 空间分析

      • 运行时内存图

    RPoint.h 接口

    @interface RPoint: NSObject
    /// 接口,继承自NSObject
    
    @property int x;//状态
    @property int y;
    /// 属性,里面放了一些数据程艳
    
    -(void)print;//行为
    ///方法,简单来说就是类内的函数
    
    @end
    

    类:

    RPoint.h 实现

    #import<Foundation/Foundation.h>
    #import "rpoint.h"
    
    @implementation RPoint
    
    -(void)print{
      NSLog(@"[%d,%d]",self.x,self.y);//self就是当前的实例
    }
    
    @end
    

    在程序中

    //创建对象
    RPoint *rp1[[RPoint alloc] init];//对象都以指针形式存在,先进行动态内存分配,alloc是向系统请求内存分配,init进行初始化。
    
    rp1.x=10;
    rp1.y=20;
    [rp1 print];//调用方法
    

    结构

    定义一个结构SPoint.h

    typedef struct{
      int x;
      int y;
    }Spoint;
    

    结构中不能再加入方法。

    在程序中创建一个结构的实例

    Spoint sp1;
    sp1.x=10;
    sp1.y=20;
    

    对象的空间分析

    对象的空间分析.png

    值的空间分析

    值的空间分析

    栈和堆的区别

    栈和堆.png

    在程序中行为上的区别

    拷贝

    RPoint *rp2=rp1;
    rp2.x++;
    rp2.y++;
    
    [rp1 print];
    [rp2 print];
    
    Spoint sp2=sp1;
    sp2.x++;
    sp2.y++;
    NSLog(@"[d%,d%]"sp1.x,sp1.y);
    NSLog(@"[d%,d%]"sp2.x,sp2.y);
    

    rp1和rp2同时被更改,而sp2的更改对sp1无影响


    拷贝行为.png

    相关文章

      网友评论

          本文标题:类与对象

          本文链接:https://www.haomeiwen.com/subject/przfkttx.html