iOS 關於OC的理解和特性分析

2021-09-19 12:25:48 字數 2253 閱讀 1853

多年之前,接觸oc開始,就知道它是一門物件導向的語言。最為物件導向的語言,我們就不得不提起物件導向的三大支柱:封裝、繼承、多型。這三大特性,時常會運用在我們日常的開發過程中,支撐著我們的每乙個專案。

封裝:即隱藏物件的屬性和實現細節,僅對外公開介面,控制在程式中屬性的讀和修改的訪問級別;將抽象得到的資料和行為(或功能)相結合,形成乙個有機的整體,也就是將資料與運算元據的源**進行有機的結合,形成「類」,其中資料和函式都是類的成員。在物件導向程式設計中,封裝(encapsulation)是將物件執行所需的資源封裝在程式物件中——基本上,是方法和資料。物件是「公布其介面」。其他附加到這些介面上的物件不需要關心物件實現的方法即可使用這個物件。這個概念就是「不要告訴我你是怎麼做的,只要做就可以了。」

繼承:可以使得子類別具有父類別的各種屬性和方法,而不需要再次編寫相同的**。在令子類別繼承父類別的同時,可以重新定義某些屬性,並重寫某些方法,即覆蓋父類別的原有屬性和方法,使其獲得與父類別不同的功能。

多型:同一操作作用於不同的物件,可以有不同的解釋,產生不同的執行結果。在執行時,可以通過指向基類的指標,來呼叫實現派生類中的方法(oc中的多型 不同物件對同一訊息的不同響應.子類可以重寫父類的方法),更通俗一點的講:用乙個父類的指標指向子類的物件,在函式(方法)呼叫的時候可以呼叫到正確版本的函式(方法)

使用多型的條件

1.子類必須重寫父類的方法

2.父類指標指向子類物件

既具有靜態語言的特性(如c++),又有動態語言的效率(動態繫結、動態載入等)

objective-c具有很多動態特性,主要表現為三大方面:動態型別(dynamic typing)、動態繫結(dynamic binding)和動態載入(dynamic loading)。動態——必須到執行時(run time)才會做的一些事情。

動態型別:即執行時再決定物件的型別,這種動態特性在日常的應用中非常常見,簡單來說就是id型別。事實上,由於靜態型別的固定性和可預知性,從而使用的更加廣泛。靜態型別是強型別,而動態型別屬於弱型別,執行時決定接受者。

動態繫結:基於動態型別,在某個例項物件被確定後,其型別便被確定了,該物件對應的屬性和響應訊息也被完全確定。

動態載入:根據需求載入所需要的資源,最基本就是不同機型的適配,例如,在retina裝置上載入@2x的,而在老一些的普通蘋裝置上載入原圖,讓程式在執行時新增**模組以及其他資源,使用者可根據需要載入一些可執行**和資源,而不是在啟動時就載入所有元件,可執行**可以含有和程式執行時整合的新類。

後續再歸納oc動態特性是怎麼做到的–runtime

mrc:oc記憶體管理遵循「誰建立,誰釋放,誰引用,誰管理」的機制,當建立或引用乙個物件的時候,需要向她傳送alloc、(mutable)copy、retain訊息,當釋放該物件時需要傳送release訊息,當物件引用計數為0時,系統將釋放該物件,這是oc的手動管理機制(**法則)

arc:這是在ios5之後出現的(自動引用計數),管理機制與手動機制一樣,只是不再需要呼叫retain、release、autorelease;它編譯時的特性,當你使用arc時,在適當位置插入release和autorelease;(arc和mrc是對應的。只不過在arc下,物件「持有」和「釋放」的記憶體管理**交由系統去呼叫罷了。)

在dealloc方法中,arc只能幫我們處理oc物件。如果例項變數持有類似corefoundation等非oc物件,則需要我們手動**:

在arc中,並不是直接執行retain和autorelease操作的,而是通過以下兩個方法:

objc_autoreleasereturnvalue(obj);//對應autorelease

objc_retainautoreleasedreturnvalue(obj);//對應retain

關於@autoreleasepool{}

通常情況下,我們是不需要手動新增 @autoreleasepool{} 的,使用執行緒自動維護的 @autoreleasepool{} 就好了。根據蘋果官方文件中對 using autorelease pool blocks 的描述,我們知道在下面三種情況下是需要我們手動新增 @autoreleasepool{} 的:

1.編寫的程式不是基於 ui 框架的,比如說命令列工具;

2.編寫的迴圈中建立了大量的臨時物件;

3.建立了乙個輔助線程。

Scala 關於疊加特性的理解

package com.atguigu.chapter08.mixin 看看混入多個特質的特點 疊加特質 object addtraits trait operate4 trait data4 extends operate4 trait db4 extends data4 trait file4 ...

關於對陣列和指標的測試與分析OC

前言 這個筆試題想必很多小夥伴都很面熟把,差不多10個人有7個人不會做這道筆試題,或許有知道答案的,但是僅僅知道答案,心裡還是一頭霧水。如果你真的不會那就請認真看完本文學習一下吧!錯誤想法 有的人認為 nslog d arrayname 1 1 加1減1不就是抵消了麼,那肯定是訪問陣列首位址,那列印...

OC中關於屬性,特性,點語法的總結

synthesize 屬性的實現部分,實現屬性自動生成的setter以及getter方法.name 屬性名,指定要實現哪乙個屬性生成的setter以及getter方法 name,指定setter和getter方法內部所要操作的例項變數.如果指定的例項變數沒有定義,系統會自動生成指定的例項變數,但是生...