GeekBand ios 第一周

一、Objective-C簡介

1、由C語言發(fā)展而來

2、“時(shí)空人”分析法

時(shí)間分析-發(fā)生在什么時(shí)候?

空間分析-變量放在哪里?

人物分析-代碼哪里來的?

3、編譯clang -fobjc-arc

---------------------------------------------------------------------------------------------

二、類與對(duì)象

對(duì)象是類的實(shí)例,類是對(duì)象的模板。

接口文件.h

@interface?RPoint:?NSObject//繼承NSObject

@property?int?x;//類的屬性-----對(duì)象的狀態(tài)“你有什么”

@property?int?y;//類的屬性-----對(duì)象的狀態(tài)“你有什么”

-(void)?print;//類的方法-----對(duì)象的行為“你能干什么

@end

實(shí)現(xiàn)文件.m

#import//類庫

#import?"rpoint.h"

@implementation?RPoint

-(void)?print{

NSLog(@"[%d,?%d]",?self.x,?self.y);//方法體,“self”當(dāng)前的實(shí)例

}

@end

main文件

#import

#import?"rpoint.h"

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

@autoreleasepool?{

RPoint*?rp1=[[RPoint?alloc]?init];//創(chuàng)建對(duì)象,對(duì)象必須以指針存在,所以需要*號(hào)。alloc向系統(tǒng)請(qǐng)求內(nèi)存分配,加中括號(hào)是方法調(diào)用。init初始化。

rp1.x=10;//訪問屬性

[rp1 print];//發(fā)送消息(調(diào)用方法)

結(jié)構(gòu)的實(shí)例,一般稱為值,類的實(shí)例一般稱為對(duì)象。

1、內(nèi)存分配方式不一樣。

2、結(jié)構(gòu)實(shí)例,沒有方法,不能給他發(fā)消息

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

值:內(nèi)存直接存儲(chǔ)與棧空間

---------------------------------------------------------------------------------------------

三、數(shù)據(jù)成員:屬性與實(shí)例變量

屬性:@property int test;(內(nèi)部狀態(tài))

實(shí)例變量: int _test; 一般在實(shí)現(xiàn)文件中(外部狀態(tài))

實(shí)例變量建議使用self.訪問,避免內(nèi)存出錯(cuò)

屬性的描述特性

讀寫特性:readwrite(默認(rèn)),readonly

多線程特性:atomic(默認(rèn)),nonatomic

內(nèi)存管理特性:strong(默認(rèn)),wead,copy。(強(qiáng)引用可能引起循環(huán)引用!)

---------------------------------------------------------------------------------------------

四、函數(shù)成員:方法

初始化器和析構(gòu)器都是特殊的方法

減號(hào)是實(shí)例方法

加號(hào)是類型方法

小技巧:特殊私有方法,接口內(nèi)不描述接口。

實(shí)例方法,self傳遞實(shí)例對(duì)象的是指針

類方法,self只是當(dāng)前類的表示

---------------------------------------------------------------------------------------------

五、初始化器和析構(gòu)器

初始化器用于初始化對(duì)象實(shí)例或者類型,是一個(gè)特殊的函數(shù)。

對(duì)象初始化器:-(id)init 可以重載多個(gè)

類型初始化器:+(void)initialize只能有一個(gè)

析構(gòu)器用于釋放對(duì)象擁有的資源,無返回值的函數(shù)

對(duì)象析構(gòu)器-(void)dealloc只能有一個(gè)

沒有類型析構(gòu)器

對(duì)象初始化器

初始化對(duì)象實(shí)例,init通常和alloc搭配使用。

alloc所做的事情-NSObject已實(shí)現(xiàn);

在堆上分配合適大小的內(nèi)存

將屬性或者實(shí)例變量內(nèi)存置0

init所做的視頻-可以自定義

調(diào)用父類初始化器【super init】

初始化當(dāng)前對(duì)象實(shí)例變量

new相當(dāng)于調(diào)用alloc/init的無參數(shù)版本

類初始化器

類初始化器initialize負(fù)責(zé)類型級(jí)別的初始化

initialize在每個(gè)類使用之前都系統(tǒng)自動(dòng)調(diào)用,且每個(gè)進(jìn)程周期中,只被調(diào)用一次

子類的initialize會(huì)自動(dòng)調(diào)用父類的initialize

對(duì)象析構(gòu)器

對(duì)象析構(gòu)器dealloc負(fù)責(zé)釋放對(duì)象擁有的動(dòng)態(tài)資源

自動(dòng)實(shí)現(xiàn):ARC將對(duì)象屬性引用計(jì)數(shù)減持

手動(dòng)實(shí)現(xiàn):釋放不受ARC管理的動(dòng)態(tài)內(nèi)存,如malloc分配的內(nèi)存

手動(dòng)實(shí)現(xiàn):關(guān)閉非內(nèi)存資源,如文件句柄、網(wǎng)絡(luò)端口

dealloc由ARC根據(jù)對(duì)象引用計(jì)數(shù)規(guī)則,在釋放對(duì)象內(nèi)存前自動(dòng)調(diào)用,無法手工調(diào)用

子類的dealloc會(huì)自動(dòng)調(diào)用父類的dealloc

---------------------------------------------------------------------------------------------

六、繼承與多態(tài)

封裝 encapsulation

隱藏對(duì)象內(nèi)部實(shí)現(xiàn)細(xì)節(jié),對(duì)外僅提供公共接口訪問

繼承 inheritance

一個(gè)類型在另外類型基礎(chǔ)上進(jìn)行的擴(kuò)展實(shí)現(xiàn)

多態(tài)polymorphism

不同類型針對(duì)同一行為接口的不同實(shí)現(xiàn)方式

認(rèn)識(shí)繼承

繼承:每個(gè)類只能有一個(gè)基類,子類自動(dòng)繼承基類的“實(shí)例變量”“屬性”“實(shí)例方法”“類方法”

了解所有類的根類:NSObject

繼承的兩層含義

成員復(fù)用:子類復(fù)用基類成員

類型抽象:將子類當(dāng)作父類來使用

認(rèn)識(shí)運(yùn)行時(shí)多態(tài) Polymorphism

多態(tài):之類在父類統(tǒng)一行為接口下,表現(xiàn)不同的實(shí)現(xiàn)方式

對(duì)比重寫與重載

之類重寫父類同名同參數(shù)方法:之類只可以重寫父類方法

方法名相同、參數(shù)不同:OC不支持方法的重載

在之類的代碼中,可以使用super來調(diào)用基類的實(shí)現(xiàn)

self具有多態(tài)性,可以指向不同子類

super沒有多態(tài)性,僅指向當(dāng)前父類

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容