IOS學習筆記

IOS學習筆記html


標籤:源代碼 編譯器 C語言 處理器程序員

原創做品,容許轉載,轉載時請務必以超連接形式標明文章 原始出處 、做者信息和本聲明。不然將追究法律責任。http://jjsun.blog.51cto.com/8697643/1630514數據結構

1、程序源代碼以C語言爲例,是如何轉換爲機器可執行的代碼?
答:
C源代碼 -> 預處理器 -> 編譯器 -> 彙編器 -> 連接器 -> 轉換爲可執行的文件
1. C源代碼通過預處理器其結果,仍是C語
2. 預處理器通過編譯(句法, 詞義分析, 代碼的優化,代碼生成),其結果是彙編代碼
3. 彙編代碼通過彙編器其結果是中間代碼(.o),其本質上也是二進制代碼
4. 中間文件(.o)通過連接器的連接, 最後生成可執行的文件。
2、C語言裏比較靈活的一塊內容是指針,那麼請談談你對指針的理解。
回答這個問題的思路:
一、什麼是指針,指針的基本概念
二、指針的使用場景
三、結合具體例子說明指針能解決哪些問題
四、關於指針運算的問題
3、C語言內存佈局

一、代碼區:主要存放代碼,也就是程序指令,這個區的數據是隻讀。
二、數據區:已初始化區和未初始化區。聲明全局變量的時候,同時給出了值,那 這個變量就放到已初始化區。未初始化區:BBS,這個區的變量,默認狀況下所有初始爲零。
三、堆區:程序員接觸最多的區域,malloc函數就是從這個 區來分配內存的,這個區從下到上擴展。
四、棧區:由系統來管理的內存區域,局部變量和函數也存在這個區,特色是先進後出。
五、命令參數及環境變 量區
4、C語言中const 關鍵字的理解
a、對於非指針變量的修飾,const int myInt與int const myInt表達的含義是同樣的,都表示myInt是一個常量。不能修改myInt的值。推薦使用const int myInt.
b、對於指針變量的聲明,有四種狀況,以int*爲例:
一、const int *pMyPointer
二、int const *pMyPointer
三、int * const *pMyPointer
四、const int * const pMyPointer
對於一、2兩種狀況,所表達的含義是同樣的,都是指指針指向的內容不能修改。
對於第3種狀況,所表達的含義是說指針自己不能再指向其它地址。
對於第4種狀況,表示指針指向的內容不能修改,同時指針自己也不能再指向其它地址。
5、在繼承語法中,關於OC的方法調度機制
一、每個對象,都有一個指針指向其類
2.當向對象發送消息, 對象準備執行方法的時候,它會先在當前對象對屬的類中查找這個方法, 若是找到話就開始執行, 若是沒有找到的話, 就去對象所屬類的父類去查 找, 若是找到就執行, 若是沒有找到, 則會沿着繼承鏈一層一層的向上去查找, 直到NSObject 類, 若是找到則執行, 若是沒有找到, 則首先編譯器會給出一個警 告, 若是忽略了這個警告,則在運行時程序會崩潰。
6、在繼承中, 子類對象是如何使用父類聲明的成員變量的?
在建立一個新類的時候, 其對象會首先從父類中繼承成員變量, 而後添加自身的成員變量。
7、談談你對OC中self 和 super的理解?
1.self 首先他是一個指針。
2.當向對象發送消息, 對象去調用對應的方法的時候, 在調用方法中, 在這個方法裏,隱藏傳了一個指針, 這個指針就是self,這個self 表明的是調用這個方法的消 息接收者。
3. 有時候, 咱們須要在子類裏顯式的調用父的方法, 這個時候 super能夠表明父類, 須要注意的是, 這個super不是指針,也不是成員變量, 而它只是編譯器識別的 指令, 主要就用於子類訪問父類的內容。
8、請問#include"header.h"和#include<header.h>有什麼區別?在OC中#import又有什麼特色?
    一、#include 屬於預處理指令。主要功能是導入頭文件內全部的內容, 其本質是將頭文件的內容原封不一樣的複製到實現文      件(.c .m .cpp .mm)
     2.#import與#include的功能和本質是同樣的。
     3.#include "header.h" 雙引號括起來。 由於要導入頭文件的內容, 因此須要找到頭文件的位置,對於雙引號, 預處理器會      首先從當前工程的路徑下去查找相應的頭 文件, 若是沒有找到, 則去系統的頭文件目錄查找。
     4.#include <> 尖括號同, 預處理器會直接從系統頭文件目錄去查找頭文件的位置
     5.#include "" 通常狀況主要用於導入自定義的頭文件。 #include <>主要用於導入系統頭文件,那麼#include預        處理指令, 在文件相互依賴的時候, 容易出現重複 包含的錯誤, 爲了解決這個問題, C語言引入了頭文件衛士的機         制#ifndef #define #endif.
      6.#import主要的特色是, 不須要使用頭文件衛士就可達到不重複包含頭文件。從本質來講, 他的內容已解決了重複包含的問題, 因此在OC語言裏, 咱們主要推薦使用 #import
9、談談你對OC程序語言內存管理機制的理解。
一、每個對象都有與之相關的整數,咱們稱這個整數爲引用計數器或保留記住器
二、當某段代碼或者某個對象,須要訪問這個對象的話,會將此對象的引用計數器加1.
10、什麼是自動釋放池,機制是什麼?
     自動釋放池相似一個容器(相似棧的數據結構),當一個對象,不能肯定它在何時銷燬,或者銷燬會使代碼實現變得更加複雜,此時就能夠向對象發送一個 autorelease消息,那麼這個對象將會被放到自動釋放池裏,當自動釋放池銷燬的時候,會向池子裏的全部對象發送一個release消息,來確保對象內存的銷燬,那麼自動 釋放池銷燬是有規律的,一般都是在一個事件循環自動完成以後,進行銷燬和建立。
* 在iPhone 應用開發中儘可能不要使用自動釋放池。
11、手動管理內存的規則是什麼?
一、 若是建立了一個對象, 就必須考慮到要釋放這個對象。若是使用了new , alloc , copy 方法得到到了一個對象, 則必須釋放或者是自動釋放此對象。
2. 若是對建立的對象,發送了retain消息,那麼必須對此對象發送release消息,保證retain 和 release的使用次數是相同。 3.鑑於,new , alloc , copy方法的特殊性, 因此咱們程序中通常的方法, 不要使用這個三個關鍵字開頭, 除非咱們的方法也是建立對象。
十二、類別的做用
1. 爲現有的類(不必定都是自定義的類,還能夠是系統定義的類, 或者是第三方提供的類)添加新的行爲 2. 可能將類的實現(複雜的、比較大的工程)分散到不一樣的文件裏來實現,或者不一樣的框架中來實現
3. 能夠建立對私有方法的前向引用(通常狀況, 作越獄開發常常用到這個功能)
4. 能夠建立NSObject的類別,(向對象添加非正式協議)
      類別有兩個侷限性
1. 沒法向類別中添加新的實例變量,類別沒有位置容納實例變量
2. 名稱衝突 類別具備比較高的優先級。框架

相關文章
相關標籤/搜索