1. 程式人生 > >iOS description 方法 引發的所學的大學計算機知識

iOS description 方法 引發的所學的大學計算機知識

1、一般情況下,我們在使用NSLog 和 %@ 輸出某個物件時,就會呼叫這個物件的 description 方法,它的返回值就是 NSString 字串型別,所以 description 預設實現返回的格式是 <類名: 物件的記憶體地址>
2、幾種空指標的說明
● nil: Defines the id of a null instance,指向一個(例項)物件的空指標
● Nil: Defines the id of a null class,指向一個類的空指標
● NULL:定義其他型別(基本型別、C型別)的空指標
● NSNull:陣列中元素的佔位符,資料中的元素不能為nil(可以為空,也就是NSNull)//nil 是陣列的結束標誌
● kCFNull: NSNull的單例
主要的區別就在 nil 系 和 NSNull系 的區別
● nil : 作為物件的空指標和陣列的結束標誌
● NSNull物件:作為陣列中的空值佔位符
什麼是變數?什麼指標,什麼物件?
3、在使用變數之前,大多數語言通常首先需要宣告變數。就是說,必須事先告訴編譯器在程式中使用了哪些變數,及這些變數的資料型別以及變數的長度。這是因為在編譯程式執行程式碼之前編譯器需要知道如何給語句變數開闢儲存區,這樣可以優化程式的執行。
4、在程式執行時記憶體中有三個區域可以儲存變數:靜態儲存區、棧(stack)和堆(heap)。
5、根據變數定義的位置可分為全域性變數(定義在函式體外的變數)和區域性變數(定義在函式體內的變數,包括形參)。
● 靜態儲存區:所有的全域性變數和靜態區域性變數(定義時使用關鍵字static)都儲存在靜態儲存區,其特點是:在編譯時分配記憶體空間並進行初始化。在程式執行期間,變數一直存在,直到程式結束,變數對應的記憶體空間才被釋放。
● 棧(stack):“而所有的非靜態區域性變數(又稱為自動變數)儲存在棧(stack)中,其特點是:在變數所在的函式或模組被執行時動態建立,函式或模組執行完時,變數對應的記憶體空間被釋放。換句話說,函式或模組每被執行一次,區域性變數就會重新被分配空間。如果變數定義時沒有初始化,那麼變數中的值是隨機數。
● 堆(heap):所有用malloc分配的記憶體(又稱為動態記憶體)都在堆(heap)中,其特點是:一般通過指標來訪問動態分配的記憶體。即可以通過free來手動釋放動態記憶體,也可以在程式結束時由系統自動釋放。
● 變數的生命週期和變數在記憶體的儲存區域有直接關係
● 變數的作用域是變數的可見範圍,所有和其定義位置有直接關係
● 變數的定義位置決定了它會被儲存在記憶體的三個區域的哪個位置
● 記憶體中有三個區域可以儲存變數:靜態儲存區、棧(stack)和堆(heap)
6、指標本身是一個變數,它儲存了指向一塊記憶體的地址;所以說指標代表一個地址;
● 就好比你的名字是張三,張三代表你這個人;出現”張三“名字這個的地方,不代表張三這個人就在這個地方。出現指標名稱的地方不代表那塊記憶體在哪裡。但是通過名稱總會找到這個名稱代表的東西。
● 使用指標的好處就是可以自己管理記憶體不受系統控制,但是指標變數受系統控制。
● 物件就好比指標
7、一個程式是怎麼結束的
通常在程式的最後安排一條終止指令。當程式執行終止指令時,將產生一箇中斷,去通知OS本程序已經完成。OS 是作業系統
什麼是程式?指令是哪裡來的?
● 計算機程式或者軟體程式(通常簡稱程式)是指一組指示計算機每一步動作的指令,通常用某種程式設計語言編寫,運行於某種目標體系結構上。
● 一條指令的功能往往是由計算機中的部件執行一系列的操作來實現的。CPU要根據指令的功能,產生相應的操作控制訊號,發給相應的部件,從而控制這些部件按指令的要求進行動作。
CPU是幹嘛的?
● 處理指令:英文Processing instructions;這是指控制程式中指令的執行順序。程式中的各指令之間是有嚴格順序的,必須嚴格按程式規定的順序執行,才能保證計算機系統工作的正確性。
● 執行操作:英文Perform an action;一條指令的功能往往是由計算機中的部件執行一系列的操作來實現的。CPU要根據指令的功能,產生相應的操作控制訊號,發給相應的部件,從而控制這些部件按指令的要求進行動作。
● 控制時間:英文Control time;時間控制就是對各種操作實施時間上的定時。在一條指令的執行過程中,在什麼時間做什麼操作均應受到嚴格的控制。只有這樣,計算機才能有條不紊地工作。
● 處理資料:即對資料進行算術運算和邏輯運算,或進行其他的資訊處理。其功能主要是解釋計算機指令以及處理計算機軟體中的資料, 並執行指令。
中斷是什麼?
● 中斷:指當出現需要時,CPU暫時停止當前程式的執行轉而執行處理新情況的程式和執行過程。即在程式執行過程中,系統出現了一個必須由CPU立即處理的情況,此時,CPU暫時中止程式的執行轉而處理這個新的情況的過程就叫做中斷。
● 通常有一些中斷源造成,這裡中斷源是該程式。也就是通常說的打斷點。
什麼是程序?
● 1)一個程序就好比一個沙箱。執行緒就如同沙箱中的孩子們。孩子們在沙箱子中跑來跑去,並且可能將沙子攘到別的孩子眼中,他們會互相踢打或撕咬。但是,這些沙箱略有不同之處就在於每個沙箱完全由牆壁和頂棚封閉起來,無論箱中的孩子如何狠命地攘沙,他們也不會影響到其它沙箱中的其他孩子
● 2)程序的概念主要有兩點:第一,程序是一個實體。每一個程序都有它自己的地址空間,一般情況下,包括文字區域(text region)、資料區域(data region)和堆疊(stack region)。文字區域儲存處理器執行的程式碼;資料區域儲存變數和程序執行期間使用的動態分配的記憶體;堆疊區域儲存著活動過程呼叫的指令和本地變數。第二,程序是一個“執行中的程式”。程式是一個沒有生命的實體,只有處理器賦予程式生命時(作業系統執行之),它才能成為一個活動的實體,我們稱其為程序。
● 程序是可以終止的。
本程序怎麼中止的?
● 0)如果系統發生了程式正常結束,異常結束,外界干預要求終止程序的某事件後,OS便呼叫程序終止原語,按下述過程去終止指定的程序。
● 1)根據被終止程序的識別符號,從PCB集合中檢索出該程序的PCB,從中讀出該程序狀態。
● 2)若被終止程序正處於執行狀態,應立即終止該程序的執行,並置排程標誌為真。用於指示該程序被終止後應重新進行排程。
● 3)若該程序還有子孫程序,還應將其所有子孫程序予以終止,以防他們成為不可控的程序。
● 4)將被終止的程序所擁有的全部資源,或者歸還給其父程序,或者歸還給系統。
● 5)將被終止程序(它的PCB)從所在佇列(或連結串列)中移出,等待其它程式來蒐集資訊。
什麼是原語?
● 原語:primitive or atomic action 是由若干個機器指令構成的完成某種特定功能的一段程式,具有不可分割性.即原語的執行必須是連續的,在執行過程中不允許被中斷
什麼是程序的PCB?
● 系統為每個程序定義了一個數據結構—-程序控制塊(PCB Process Control Block)
● 包含的資訊:程序識別符號、處理機狀態、程序排程資訊、程序控制資訊
● PCB是程序存在的唯一標誌。