OC数据类型及内存管理

首先介绍一下数据的类型

  • 1.基本数据类型

  • 2.枚举(enum)类型

  • 3.结构体类型

  • 4.对象类型

  • 5.block代码段

  • 6.SEL方法选择题

基本数据类型及枚举类型

分类:short、int 、long、float、double、char、bool、enum  

        声明时可以在int等数值类型前加 signed(有符号、默认) 或unsigned(无符号)修饰

        union共用体、struct 结构体

short、int 、long 和 NSInteger的区别

这个四个都是存放整形数值的,如 int i =100.1,i ==100;只能拿到整数位

NSInteger是一个封装,他会识别当前操作系统的位数,自动返回最大的类型(打印时用%ld和long一样)。(苹果官方文档推荐使用NSInteger而不使用short、int、long)。

基本数据类型转换为对象类型(NSNumber *)(NSNumber是NSValue的子类)

结构体类型:

  • NSRange :区间,常用于字符串中指定字符的区域 
  • CGSize:  常用于表示视图的大小 包含 CGFloat width 、CGFloat height
  • CGPoint: 常用于表示视图的位置 包含 CGFloat x、 CGFloat y 
  • CGRect : 包含了 CGSize size和 CGPoint origin
  • CGVector: 表示速度。 包含CGFloat dx 、CGfloat dy

关于以上输出打印,可以通过转换为NSString类型输出

其中CGSize、CGPoint、CGRect、CGVector都属于CGGeometry.h类里的,获取里面的属性时都可以通过点语法调用 如 rect.origin.y ,关键都可以通过CG...Make创建,如CGSizeMake();

这里需要特别注意的是,有时候当我们通过某些回调方法获取到的是CGPoint *而不是CGPoint类型时,我们要拿到里面的x/y值就不能通过点语法了,而是要通过 ->y 获取

结构体类型转换为对象类型(NSValue *)

对象类型

这里为了衔接上文先讲对象类型转换(还原)为NSNumber/NSValue类型

NSNumber转基本类型数据

 

再附上number转其他基本类型的方法

NSValue转(还原)为结构体类型

当然,NSValue不能自动拆箱为结构体。

对象的种类

oc对象主要分为三类

  • instance对象(实例对象)
  • class对象 (类对象)
  • meta_class对象(元类对象)

instance 实例对象

NSObjcet *object1 = [[NSObject alloc] init];
NSObjcet *object2 = [[NSObject alloc] init];
NSObject *object3 = object1; //默认是strong类型的
/*
    注意1:如果对象(NSObject)是一个单例,则每次alloc出来的都是同一个对象
        (object1 == object2 )(内存地址相同)
        如果不是单例的,则object1 和object2的内存地址不同
        
    注意2:object3 也是实例对象,只是它是copy了object1这个实例对象,并没有自己去alloc出来,
        
        生成一个新的指针指向object1的内存地址
    */

实例对象在内存中存放的信息包括

  • isa指针
  • 成员变量

class类对象

       class对象是用来描述一个instance对象的,它内部存放该类的属性信息(@property)、对象方法信息协议信息成员变量信息(ivar)等。另外,class对象里面还有isa指针superclass指针。

获取类对象的两种方法:

NSObject *obj1 = [[NSObject alloc] init];

Class objClass1 = [NSObject class];
Class objClass2 = [obj1 class];
Class objClass3 = object_getClass(obj1);
/*
    通过打印可以知道,这里获得的objClass1、objClass2、objClass3的内存地址相同
    所以一个类的类对象是唯一的,在内存中只存一份,这也很好理解,因为类对象中的信息只需要一份就够了。
    而且类对象存放在堆中!!!!!!

    */

 元类对象这里就先不讲了,想要了解的话可以结合isa指针系统的去学习

参数资料:

https://www.jianshu.com/p/e9785f28b88d OC对象的本质

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值