类型系统
-
引用类型
- 类 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;
对象的空间分析
值的空间分析
栈和堆的区别
在程序中行为上的区别
拷贝
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无影响