Objective-C數(shù)據(jù)類型 - NSObject

Objective-C數(shù)據(jù)類型 - NSObject

對(duì)象

Objective-C(下稱ObjC)語言是一個(gè)C語言的面向?qū)ο蟮姆庋b绊汹,從英文名字上就能看出端倪,Object即為對(duì)象卵贱,等同于C++滥沫、Java中的類(Class)。

對(duì)象(object)键俱,就是ObjC中編程的核心兰绣。所謂對(duì)象和類,就是抽象出來的一類事物的總稱编振,例如我們要寫一個(gè)像微信的應(yīng)用程序缀辩,我就要?jiǎng)?chuàng)建聯(lián)系人這個(gè)對(duì)象,聯(lián)系人有自己的屬性党觅,在ObjC中稱謂Property雌澄,包括用戶名斋泄、頭像等內(nèi)容杯瞻。

再比如我們的應(yīng)用程序需要管理全公司車輛,就可以作為一個(gè)類炫掐,而轎車魁莉、客車則是子類,在ObjC中,子類繼承父類的屬性和方法募胃,并且還可以有自己獨(dú)有的屬性和方法旗唁。

NSObject

在ObjC中,我們使用的框架名為Cocoa,對(duì)應(yīng)iOS的版本叫做Cocoa Touch痹束,這兩個(gè)框架在的部分代碼是相同的检疫,比如最基礎(chǔ)也是最重要的Foundation框架。

Foundation框架中幾乎所有的對(duì)象祷嘶,都是以NS開頭屎媳,這是由喬布斯離開蘋果那幾年,創(chuàng)建的計(jì)算機(jī)公司NEXTSTEP的NEXTSTEP操作系統(tǒng)遺留的代碼论巍。

在所有的NS對(duì)象中烛谊,最為基礎(chǔ)的類,就是NSObject類嘉汰,是Cocoa框架中所有對(duì)象的基類丹禀,所有其他NS對(duì)象,都是NSObject的子類鞋怀。NSObject包含了NS類中所有的基本屬性和方法双泪,例如

+ (void)load; //當(dāng)類被引用進(jìn)程序的時(shí)候會(huì)執(zhí)行這個(gè)函數(shù)
+ (void)initialize;//當(dāng)類第一次被執(zhí)行到的時(shí)候這個(gè)函數(shù)會(huì)被執(zhí)行

這兩個(gè)方法,沒有任何關(guān)聯(lián)密似,沒有先后調(diào)用順序只說攒读,一般很少用到,僅有少數(shù)幾種使用方法辛友,將在后面的章節(jié)詳細(xì)講解薄扁。

實(shí)例化

+ (instancetype)alloc;//實(shí)例化函數(shù)
- (instancetype)init; //初始化函數(shù)
+ (instancetype)new;  //初始化函數(shù)

方法組成為:
+/- (返回值類型)方法名:(參數(shù)類型)參數(shù)名 :(參數(shù)類型2)參數(shù)名2 等

在ObjC中剪返,函數(shù)分為類方法實(shí)例方法,分別用+-開頭邓梅。
第一個(gè)括號(hào)中的類型脱盲,是返回值類型,可以是對(duì)象日缨,也可以是普通變量類型(int整數(shù)钱反,BOOL布爾值等),也可以無返回值(void)匣距。
上面三個(gè)方法中的instancetype就是代替當(dāng)前類的類型面哥,例如在NSObject類中,instancetype就是返回NSObject實(shí)例毅待。

類方法與實(shí)例方法

類方法尚卫,就是可以直接用類名調(diào)用的方法,例如new方法

NSObject* someObject = [NSObject new];

init方法則為實(shí)例方法尸红,需要先調(diào)用

+ (instancetype)alloc; //分配空間吱涉,返回實(shí)例

返回實(shí)例后,用實(shí)例調(diào)用外里。

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

這里的嵌套寫法怎爵,等同于

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

函數(shù)參數(shù)

類方法或?qū)嵗椒ǎ梢詡魅霟o限多個(gè)參數(shù)盅蝗,也可以不傳入?yún)?shù)鳖链,書寫的格式就是冒號(hào)(參數(shù)類型)參數(shù)名,冒號(hào)前面可以有描述墩莫,也可以沒有芙委,一般我們都寫上,例如我們有一個(gè)計(jì)算機(jī)類贼穆,他有兩個(gè)方法

- (BOOL)loginInWithName:(id)name password:(id)password;
- (void)loginOut;

這是我們假設(shè)的兩個(gè)方法题山,分別對(duì)應(yīng)用戶名登陸,和注銷故痊。
登陸方法顶瞳,傳入了用戶名和密碼兩個(gè)參數(shù),返回一個(gè)BOOL結(jié)果告訴用戶是否登陸成功愕秫,而注銷方法則不需要傳入?yún)?shù)慨菱,也沒有返回值。

泛型

ObjC中的泛型戴甩,就是指id類型符喝。因?yàn)镺bjC是運(yùn)行時(shí)鏈接語言,類和實(shí)例的方法的調(diào)用甜孤,是在真正運(yùn)行程序時(shí)候才進(jìn)行綁定的协饲。在編譯的時(shí)候畏腕,如果欺騙了編譯器也是能通過的,但運(yùn)行時(shí)就會(huì)有錯(cuò)誤茉稠。
例如(以下代碼不能直接運(yùn)行描馅,只是示意)

Book* book = [Book new];
id car = book; // 注意這里car是泛型
[car openDoor];// 編譯器并不知道car的真實(shí)類型,這一步不會(huì)報(bào)錯(cuò)

但真正執(zhí)行到openDoor的時(shí)候而线,才會(huì)知道原來car是一個(gè)book铭污,并沒有開門openDoor方法,則會(huì)拋出異常膀篮。更多泛型的實(shí)際用法嘹狞,將在后面的章節(jié)講解。

內(nèi)存管理

在xcode引入ARC(自動(dòng)內(nèi)存管理)以后誓竿,NSObjec就不需要手動(dòng)調(diào)用

- (void)dealloc; //釋放

來釋放內(nèi)存了磅网。并且編譯器會(huì)禁止在ARC環(huán)境下,編寫調(diào)用dealloc或其他與引用計(jì)數(shù)相關(guān)的方法烤黍,例如

- (instancetype)retain OBJC_ARC_UNAVAILABLE; //引用計(jì)數(shù)+1
- (oneway void)release OBJC_ARC_UNAVAILABLE; //引用計(jì)數(shù)-1
- (instancetype)autorelease OBJC_ARC_UNAVAILABLE; //加入自動(dòng)釋放池
- (NSUInteger)retainCount OBJC_ARC_UNAVAILABLE; //返回引用計(jì)數(shù)

注意這些方法后的宏OBJC_ARC_UNAVAILABLE知市,就是告訴編譯器這些方法ARC下禁用傻盟。

實(shí)例比較

- (BOOL)isEqual:(id)object;  //對(duì)象比較
@property (readonly) NSUInteger hash; //唯一哈稀值

每一個(gè)內(nèi)存中實(shí)例化的對(duì)象速蕊,都有唯一的hash值,作為比較的參考娘赴。isEqual方法就是hash值的比較結(jié)果规哲。

類相關(guān)

@property (readonly) Class superclass; //父類
- (Class)class OBJC_SWIFT_UNAVAILABLE("use 'anObject.dynamicType' instead"); //當(dāng)前類

這兩個(gè)函數(shù)返回的數(shù)據(jù)類型為Class,是一個(gè)C語言的結(jié)構(gòu)體诽表。通過下面兩個(gè)方法可以判斷當(dāng)前類的類型唉锌。

- (BOOL)isKindOfClass:(Class)aClass; //是否為aClass
- (BOOL)isMemberOfClass:(Class)aClass; //是否為aClass或其子類

小節(jié)

NSObjec作為ObjC中的基類,其部分方法的調(diào)用竿奏,是貫穿整個(gè)Cocoa框架開發(fā)的必備技能袄简,務(wù)必要學(xué)會(huì)使用。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末泛啸,一起剝皮案震驚了整個(gè)濱河市绿语,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌候址,老刑警劉巖吕粹,帶你破解...
    沈念sama閱讀 211,042評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異岗仑,居然都是意外死亡匹耕,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,996評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門荠雕,熙熙樓的掌柜王于貴愁眉苦臉地迎上來稳其,“玉大人驶赏,你說我怎么就攤上這事〖染希” “怎么了母市?”我有些...
    開封第一講書人閱讀 156,674評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長损趋。 經(jīng)常有香客問我患久,道長,這世上最難降的妖魔是什么浑槽? 我笑而不...
    開封第一講書人閱讀 56,340評(píng)論 1 283
  • 正文 為了忘掉前任蒋失,我火速辦了婚禮,結(jié)果婚禮上桐玻,老公的妹妹穿的比我還像新娘篙挽。我一直安慰自己,他們只是感情好镊靴,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,404評(píng)論 5 384
  • 文/花漫 我一把揭開白布铣卡。 她就那樣靜靜地躺著,像睡著了一般偏竟。 火紅的嫁衣襯著肌膚如雪煮落。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,749評(píng)論 1 289
  • 那天踊谋,我揣著相機(jī)與錄音蝉仇,去河邊找鬼。 笑死殖蚕,一個(gè)胖子當(dāng)著我的面吹牛轿衔,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播睦疫,決...
    沈念sama閱讀 38,902評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼害驹,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了蛤育?” 一聲冷哼從身側(cè)響起宛官,我...
    開封第一講書人閱讀 37,662評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎缨伊,沒想到半個(gè)月后摘刑,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,110評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡刻坊,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評(píng)論 2 325
  • 正文 我和宋清朗相戀三年枷恕,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片谭胚。...
    茶點(diǎn)故事閱讀 38,577評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡徐块,死狀恐怖未玻,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情胡控,我是刑警寧澤扳剿,帶...
    沈念sama閱讀 34,258評(píng)論 4 328
  • 正文 年R本政府宣布,位于F島的核電站昼激,受9級(jí)特大地震影響庇绽,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜橙困,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,848評(píng)論 3 312
  • 文/蒙蒙 一瞧掺、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧凡傅,春花似錦辟狈、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,726評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至槽华,卻和暖如春壹蔓,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背硼莽。 一陣腳步聲響...
    開封第一講書人閱讀 31,952評(píng)論 1 264
  • 我被黑心中介騙來泰國打工庶溶, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留煮纵,地道東北人懂鸵。 一個(gè)月前我還...
    沈念sama閱讀 46,271評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像行疏,于是被迫代替她去往敵國和親匆光。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,452評(píng)論 2 348

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