IOS学习笔记
一、程序源代碼以C語言為例,是如何轉(zhuǎn)換為機(jī)器可執(zhí)行的代碼?
答:
C源代碼 -> 預(yù)處理器 -> 編譯器 -> 匯編器 -> 鏈接器 -> 轉(zhuǎn)換為可執(zhí)行的文件
1. C源代碼經(jīng)過預(yù)處理器其結(jié)果,還是C語
2. 預(yù)處理器經(jīng)過編譯(句法, 詞義分析, 代碼的優(yōu)化,代碼生成),其結(jié)果是匯編代碼
3. 匯編代碼經(jīng)過匯編器其結(jié)果是中間代碼(.o),其本質(zhì)上也是二進(jìn)制代碼
4. 中間文件(.o)經(jīng)過鏈接器的鏈接, 最后生成可執(zhí)行的文件。
二、C語言里比較靈活的一塊內(nèi)容是指針,那么請談?wù)勀銓χ羔樀睦斫狻?/span>
回答這個(gè)問題的思路:
1、什么是指針,指針的基本概念
2、指針的使用場景
3、結(jié)合具體例子說明指針能解決哪些問題
4、關(guān)于指針運(yùn)算的問題
三、C語言內(nèi)存布局
1、代碼區(qū):主要存放代碼,也就是程序指令,這個(gè)區(qū)的數(shù)據(jù)是只讀。
2、數(shù)據(jù)區(qū):已初始化區(qū)和未初始化區(qū)。聲明全局變量的時(shí)候,同時(shí)給出了值,那 這個(gè)變量就放到已初始化區(qū)。未初始化區(qū):BBS,這個(gè)區(qū)的變量,默認(rèn)情況下全部初始為零。
3、堆區(qū):程序員接觸最多的區(qū)域,malloc函數(shù)就是從這個(gè) 區(qū)來分配內(nèi)存的,這個(gè)區(qū)從下到上擴(kuò)展。
4、棧區(qū):由系統(tǒng)來管理的內(nèi)存區(qū)域,局部變量和函數(shù)也存在這個(gè)區(qū),特點(diǎn)是先進(jìn)后出。
5、命令參數(shù)及環(huán)境變 量區(qū)
四、C語言中const 關(guān)鍵字的理解
a、對于非指針變量的修飾,const int myInt與int const myInt表達(dá)的含義是一樣的,都表示myInt是一個(gè)常量。不能修改myInt的值。推薦使用const int myInt.
b、對于指針變量的聲明,有四種情況,以int*為例:
1、const int *pMyPointer
2、int const *pMyPointer
3、int * const *pMyPointer
4、const int * const pMyPointer
對于1、2兩種情況,所表達(dá)的含義是一樣的,都是指指針指向的內(nèi)容不能修改。
對于第3種情況,所表達(dá)的含義是說指針本身不能再指向其它地址。
對于第4種情況,表示指針指向的內(nèi)容不能修改,同時(shí)指針本身也不能再指向其它地址。
五、在繼承語法中,關(guān)于OC的方法調(diào)度機(jī)制
1、每一個(gè)對象,都有一個(gè)指針指向其類
2.當(dāng)向?qū)ο蟀l(fā)送消息, 對象準(zhǔn)備執(zhí)行方法的時(shí)候,它會(huì)先在當(dāng)前對象對屬的類中查找這個(gè)方法, 如果找到話就開始執(zhí)行, 如果沒有找到的話, 就去對象所屬類的父類去查 找, 如果找到就執(zhí)行, 如果沒有找到, 則會(huì)沿著繼承鏈一層一層的向上去查找, 直到NSObject 類, 如果找到則執(zhí)行, 如果沒有找到, 則首先編譯器會(huì)給出一個(gè)警 告, 如果忽略了這個(gè)警告,則在運(yùn)行時(shí)程序會(huì)崩潰。
六、在繼承中, 子類對象是如何使用父類聲明的成員變量的?
在創(chuàng)建一個(gè)新類的時(shí)候, 其對象會(huì)首先從父類中繼承成員變量, 然后添加自身的成員變量。
七、談?wù)勀銓C中self 和 super的理解?
1.self 首先他是一個(gè)指針。
2.當(dāng)向?qū)ο蟀l(fā)送消息, 對象去調(diào)用對應(yīng)的方法的時(shí)候, 在調(diào)用方法中, 在這個(gè)方法里,隱藏傳了一個(gè)指針, 這個(gè)指針就是self,這個(gè)self 代表的是調(diào)用這個(gè)方法的消 息接收者。
3. 有時(shí)候, 我們需要在子類里顯式的調(diào)用父的方法, 這個(gè)時(shí)候 super可以代表父類, 需要注意的是, 這個(gè)super不是指針,也不是成員變量, 而它只是編譯器識(shí)別的 指令, 主要就用于子類訪問父類的內(nèi)容。
八、請問#include"header.h"和#include<header.h>有什么區(qū)別?在OC中#import又有什么特點(diǎn)?
? ? 1、#include 屬于預(yù)處理指令。主要功能是導(dǎo)入頭文件內(nèi)所有的內(nèi)容, 其本質(zhì)是將頭文件的內(nèi)容原封不同的復(fù)制到實(shí)現(xiàn)文 ? ? ?件(.c .m .cpp .mm)
? ? ?2.#import與#include的功能和本質(zhì)是一樣的。
? ? ?3.#include "header.h" 雙引號(hào)括起來。 因?yàn)橐獙?dǎo)入頭文件的內(nèi)容, 所以需要找到頭文件的位置,對于雙引號(hào), 預(yù)處理器會(huì) ? ? ?首先從當(dāng)前工程的路徑下去查找相應(yīng)的頭 文件, 如果沒有找到, 則去系統(tǒng)的頭文件目錄查找。
? ? ?4.#include <> 尖括號(hào)同, 預(yù)處理器會(huì)直接從系統(tǒng)頭文件目錄去查找頭文件的位置
? ? ?5.#include "" 一般情況主要用于導(dǎo)入自定義的頭文件。 #include <>主要用于導(dǎo)入系統(tǒng)頭文件,那么#include預(yù) ? ? ? ?處理指令, 在文件相互依賴的時(shí)候, 容易出現(xiàn)重復(fù) 包含的錯(cuò)誤, 為了解決這個(gè)問題, C語言引入了頭文件衛(wèi)士的機(jī) ? ? ? ? 制#ifndef #define #endif.
? ? ? 6.#import主要的特點(diǎn)是, 不需要使用頭文件衛(wèi)士就可達(dá)到不重復(fù)包含頭文件。從本質(zhì)來說, 他的內(nèi)容已解決了重復(fù)包含的問題, 所以在OC語言里, 我們主要推薦使用 #import
九、談?wù)勀銓C程序語言內(nèi)存管理機(jī)制的理解。
1、每一個(gè)對象都有與之相關(guān)的整數(shù),我們稱這個(gè)整數(shù)為引用計(jì)數(shù)器或保留記住器
2、當(dāng)某段代碼或者某個(gè)對象,需要訪問這個(gè)對象的話,會(huì)將此對象的引用計(jì)數(shù)器加1.
十、什么是自動(dòng)釋放池,機(jī)制是什么?
? ? ?自動(dòng)釋放池類似一個(gè)容器(類似棧的數(shù)據(jù)結(jié)構(gòu)),當(dāng)一個(gè)對象,不能確定它在什么時(shí)候銷毀,或者銷毀會(huì)使代碼實(shí)現(xiàn)變得更加復(fù)雜,此時(shí)就可以向?qū)ο蟀l(fā)送一個(gè) autorelease消息,那么這個(gè)對象將會(huì)被放到自動(dòng)釋放池里,當(dāng)自動(dòng)釋放池銷毀的時(shí)候,會(huì)向池子里的所有對象發(fā)送一個(gè)release消息,來確保對象內(nèi)存的銷毀,那么自動(dòng) 釋放池銷毀是有規(guī)律的,通常都是在一個(gè)事件循環(huán)自動(dòng)完成之后,進(jìn)行銷毀和創(chuàng)建。
* 在iPhone 應(yīng)用開發(fā)中盡量不要使用自動(dòng)釋放池。
十一、手動(dòng)管理內(nèi)存的規(guī)則是什么?
1、 如果創(chuàng)建了一個(gè)對象, 就必須考慮到要釋放這個(gè)對象。如果使用了new , alloc , copy 方法獲得到了一個(gè)對象, 則必須釋放或者是自動(dòng)釋放此對象。
2. 如果對創(chuàng)建的對象,發(fā)送了retain消息,那么必須對此對象發(fā)送release消息,保證retain 和 release的使用次數(shù)是相同。 3.鑒于,new , alloc , copy方法的特殊性, 所以我們程序中一般的方法, 不要使用這個(gè)三個(gè)關(guān)鍵字開頭, 除非我們的方法也是創(chuàng)建對象。
12、類別的作用
1. 為現(xiàn)有的類(不一定都是自定義的類,還可以是系統(tǒng)定義的類, 或者是第三方提供的類)添加新的行為 2. 可能將類的實(shí)現(xiàn)(復(fù)雜的、比較大的工程)分散到不同的文件里來實(shí)現(xiàn),或者不同的框架中來實(shí)現(xiàn)
3. 可以創(chuàng)建對私有方法的前向引用(一般情況, 做越獄開發(fā)經(jīng)常用到這個(gè)功能)
4. 可以創(chuàng)建NSObject的類別,(向?qū)ο筇砑臃钦絽f(xié)議)
? ? ? 類別有兩個(gè)局限性
1. 無法向類別中添加新的實(shí)例變量,類別沒有位置容納實(shí)例變量
2. 名稱沖突 類別具有比較高的優(yōu)先級(jí)。
轉(zhuǎn)載于:https://blog.51cto.com/jjsun/1630514
總結(jié)
- 上一篇: 思科交换机VTP配置
- 下一篇: WebStorm 10支持TypeScr