類與對(duì)象

類型如下:

引用類型:reference type

類:class

指針:pointer

塊:block


值類型:value type

基礎(chǔ)數(shù)值類型

結(jié)構(gòu):struct

枚舉:enum


類型裝飾

協(xié)議:protocol

類別:category

擴(kuò)展:extension



類:class VS 結(jié)構(gòu)體 struct

類:

接口:@interface 指的是對(duì)外可見的部分。

接口文件

@interface Point(類名):NSObject(繼承的類)

屬性定義 ? 屬性:對(duì)象的狀態(tài)

@property int x;

實(shí)例方法:方法是行為

-(void)prints;返回值時(shí)void的。

@end


比如初始化對(duì)象。

Point *p1=[Point alloc] init];//先分配內(nèi)存,接著初始化。

p1:就叫做對(duì)象。

對(duì)象的空間分析:

對(duì)象:棧上存儲(chǔ)的是指針,堆上存儲(chǔ)的是真正的對(duì)象。

類:是引用類型

指針:存在棧上

實(shí)體對(duì)象:存在堆上

結(jié)構(gòu)是值類型

值類型,直接存在棧上。


重點(diǎn) 棧(stack)VS 堆(heap)

棧:存儲(chǔ)值類型

無ARC(自動(dòng)引用計(jì)數(shù))負(fù)擔(dān),由系統(tǒng)自動(dòng)管理,以執(zhí)行函數(shù)為單位(一個(gè)函數(shù)一個(gè)棧,一個(gè)棧的大?。焊鶕?jù)類型,參數(shù),函數(shù)變量等來計(jì)算)

空間大小,編譯時(shí)確定(參數(shù)+局部變量)

函數(shù)執(zhí)行時(shí),系統(tǒng)自動(dòng)分配一個(gè)stack棧。

函數(shù)執(zhí)行結(jié)束時(shí),系統(tǒng)立即收回stack棧。

函數(shù)之間通過拷貝值傳遞。

具有局部性,大小有限制(一般就幾兆),超出會(huì)(stack)棧overflow(溢出)。一般不會(huì)溢出,除非你寫出死循環(huán),超大遞歸會(huì)導(dǎo)致溢出,棧的負(fù)擔(dān)比較小。


堆:存儲(chǔ)引用類型對(duì)象

分配由程序員手動(dòng)請(qǐng)求(創(chuàng)建對(duì)象的時(shí)候)

釋放由運(yùn)行時(shí)的ARC機(jī)制自動(dòng)釋放(確定時(shí))

函數(shù)之間通過拷貝引用(指針)傳遞。

具有全局性,總體無大小限制(受制于系統(tǒng)內(nèi)存整體大小),最自由也會(huì)最容易出問題,內(nèi)存泄漏問題。

例子如下:

RPoint.h

#import

@interface RPoint : NSObject

//屬性

@property int x;

@property int y;

//打印方法

-(void)prints;

@end


類實(shí)現(xiàn)文件

? RPoint.m

#import "RPoint.h"

@implementation RPoint

//實(shí)現(xiàn)打印方法

-(void)prints{

NSLog(@"[%d,%d]",self.x,self.y);

}

@end


結(jié)構(gòu)體

?SPoint.h

typedef struct{

int x;

int y;

}SPoint;

////? main.m

#import#import "RPoint.h"

#import "SPoint.h"

int main(int argc, const char * argv[]) {

@autoreleasepool {

//初始化對(duì)象。手動(dòng)分配內(nèi)存

RPoint *rp1=[[RPoint alloc] init];

rp1.x=10;

rp1.y=20;

[rp1 prints];

//再初始化一個(gè)對(duì)象

RPoint *rp2=rp1;

rp2.x=30;

rp2.y=40;

[rp2 prints];

[rp1 prints];

//指針存在 棧中,會(huì)復(fù)制一個(gè)棧出來,但是堆還是一個(gè)。值存在堆中。當(dāng)rp2和rp1指向的都是同一個(gè)堆。所以。rp2改變的時(shí)候。rp1也相應(yīng)改變。

//結(jié)構(gòu)體是值類型。直接存在棧上。

SPoint sp1;

sp1.x=11;

sp1.y=22;

NSLog(@"x=%d,y=%d",sp1.x,sp1.y);

SPoint sp2=sp1;

sp2.x=12;

sp2.y=23;

NSLog(@"x=%d,y=%d",sp2.x,sp2.y);

NSLog(@"x=%d,y=%d",sp1.x,sp1.y);

//結(jié)構(gòu)體,拷貝出來的是一個(gè)棧。所以他們的值不是一個(gè)。sp2更改后,對(duì)sp1沒有影響。

}

return 0;

}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 原文出處:南峰子的技術(shù)博客 Objective-C語言是一門動(dòng)態(tài)語言,它將很多靜態(tài)語言在編譯和鏈接時(shí)期做的事放到了...
    _燴面_閱讀 1,442評(píng)論 1 5
  • Objective-C語言是一門動(dòng)態(tài)語言,他將很多靜態(tài)語言在編譯和鏈接時(shí)期做的事情放到了運(yùn)行時(shí)來處理。這種動(dòng)態(tài)語言...
    tigger丨閱讀 1,603評(píng)論 0 8
  • 類型系統(tǒng) 1. 引用類型:類(Class) 2. 值類型 3. 類型裝飾 類 1. 接口 屬性表達(dá)狀態(tài) 方法表達(dá)行...
    robinn9810閱讀 307評(píng)論 0 0
  • C++基礎(chǔ)2:類與對(duì)象 1. 認(rèn)識(shí)類與對(duì)象 什么是類(class)?類(class)是類型(type),是用戶自定...
    jdzhangxin閱讀 2,469評(píng)論 0 7
  • 每到秋風(fēng)來臨,露水成霜時(shí),樹葉脫落了,群花萎縮了,唯有菊花迎風(fēng)而立、傲霜怒放、千姿百態(tài)。
    0434欣玥閱讀 258評(píng)論 0 4

友情鏈接更多精彩內(nèi)容