類型系統(tǒng)
-
引用類型
- 類 class
- 指針 pointer
- 塊 block
-
值類型 value type
- 基礎(chǔ)數(shù)值類型
- 結(jié)構(gòu) struct
- 枚舉 enum
-
類型裝飾
- 協(xié)議 protocol
- 類別 category
- 擴(kuò)展 extension
類 class VS. 結(jié)構(gòu) struct
-
類型與實(shí)例
- 類與對(duì)象
- 結(jié)構(gòu)與值
-
類——引用類型
- 位于棧上的指針(引用)
- 位于堆上的實(shí)體對(duì)象
-
結(jié)構(gòu)——值類型
- 實(shí)例直接位于棧中
-
空間分析
- 運(yùn)行時(shí)內(nèi)存圖
RPoint.h 接口
@interface RPoint: NSObject
/// 接口,繼承自NSObject
@property int x;//狀態(tài)
@property int y;
/// 屬性,里面放了一些數(shù)據(jù)程艷
-(void)print;//行為
///方法,簡(jiǎn)單來(lái)說(shuō)就是類內(nèi)的函數(shù)
@end
類:
RPoint.h 實(shí)現(xiàn)
#import<Foundation/Foundation.h>
#import "rpoint.h"
@implementation RPoint
-(void)print{
NSLog(@"[%d,%d]",self.x,self.y);//self就是當(dāng)前的實(shí)例
}
@end
在程序中
//創(chuàng)建對(duì)象
RPoint *rp1[[RPoint alloc] init];//對(duì)象都以指針形式存在,先進(jìn)行動(dòng)態(tài)內(nèi)存分配,alloc是向系統(tǒng)請(qǐng)求內(nèi)存分配,init進(jìn)行初始化。
rp1.x=10;
rp1.y=20;
[rp1 print];//調(diào)用方法
結(jié)構(gòu)
定義一個(gè)結(jié)構(gòu)SPoint.h
typedef struct{
int x;
int y;
}Spoint;
結(jié)構(gòu)中不能再加入方法。
在程序中創(chuàng)建一個(gè)結(jié)構(gòu)的實(shí)例
Spoint sp1;
sp1.x=10;
sp1.y=20;
對(duì)象的空間分析

對(duì)象的空間分析.png
值的空間分析

值的空間分析
棧和堆的區(qū)別

棧和堆.png
在程序中行為上的區(qū)別
拷貝
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同時(shí)被更改,而sp2的更改對(duì)sp1無(wú)影響

拷貝行為.png