IOS筆試題目一

Object-C有多繼承嗎?沒有的話用什麼代替?緩存

OC是單繼承,沒有多繼承函數

有時能夠用分類和協議來代替多繼承性能

 

Object-C有私有方法嗎?私有變量呢?測試

OC沒有相似@private的修飾詞來修飾方法,只要寫在.h文件中,就是公共方法線程

能夠直接在.m文件中(好比類擴展)聲明和實現方法,對編譯器來講是私有的代理

 

關鍵字const什麼含義?指針

const int a;對象

int const a;繼承

const int *a;進程

int const *a;

int * const a;

int const * const a;

1> 前兩個的做用是同樣:a 是一個常整型數

2> 第3、四個意味着 a 是一個指向常整型數的指針(整型數是不可修改的,但指針能夠)

3> 第五個的意思:a 是一個指向整型數的常指針(指針指向的整型數是能夠修改的,但指針是不可修改的)

4> 最後一個意味着:a 是一個指向常整型數的常指針(指針指向的整型數是不可修改的,同時指針也是不可修改的)

 

static的做用?

static修飾的函數是一個內部函數,只能在本文件中調用,其餘文件不能調用

static修飾的所有變量是一個內部變量,只能在本文件中使用,其餘文件不能使用

static修飾的局部變量只會初始化一次,而且在程序退出時纔會回收內存

 

線程和進程的區別?

一個應用程序對應一個進程,一個進程幫助程序佔據一塊存儲空間

要想在進程中執行任務,就必須開啓線程,一條線程就表明一個任務

一個進程中容許開啓多條線程,也就是同時執行多個任務

堆和棧的區別?

堆空間的內存是動態分配的,通常存放對象,而且須要手動釋放內存

棧空間的內存由系統自動分配,通常存放局部變量等,不須要手動管理內存

 

爲何不少內置的類,如TableView的delegate的屬性是assign不是retain?

tableView的代理通常都是它所屬的控制器,控制器會對它內部的view作一次retain操做

假設tableView也對代理(控制器)作一次retain操做,那麼就出現循環retain問題

 

定義屬性時,什麼狀況使用copy、assign、retain?

copy:NSString、Block等類型

assign:基本數據類型

retain:OC對象類型

 

對象是何時被釋放的?

每一個對象都有一個引用計數器,每一個新對象的計數器是1,當對象的計數器減爲0時,就會被銷燬

 

tableView的重用機制?

這裏只是簡述:將離開屏幕的cell放到緩存池,從新拿來顯示到屏幕的其餘位置(其餘本身詳細描述)

 

ViewController 的loadView、viewDidLoad、viewDidUnload分別是何時調用的,在自定義ViewCointroller時在這幾個函數中應該作什麼工做?

loadView

當第一次使用控制器的view時,會調用loadView方法建立view

通常在這裏自定義view

 

viewDidLoad

當控制器的view建立完畢時會調用,也就是在loadView後調用

通常在這裏添加子控件、初始化數據

 

viewDidUnload

當控制器的view由於內存警告被銷燬時調用

通常在這裏回收跟界面相關的資源(界面都會銷燬了,跟界面相關的資源確定不要了)

 

ViewController的didReceiveMemoryWarning是在何時調用的?默認的操做是什麼?

當應用程序接收到系統的內容警告時,就有可能調用控制器的didRece…Warning方法

它的默認作法是:

當控制器的view不在窗口上顯示時,就會直接銷燬,而且調用viewDidUnload方法

 

怎麼理解MVC,在Cocoa中MVC是怎麼實現的?

M:Model,模型,封裝數據

V:View,視圖界面,負責展現數據

C:Controller,控制器,負責提供數據(Model)給界面(View)

 

self.跟self->什麼區別?

self.是調用get方法或者set放

self是當前自己,是一個指向當前對象的指針

self->是直接訪問成員變量

 

id、nil表明什麼?

id類型的指針能夠指向任何OC對象

nil表明空值(空指針的值)

 

如何對iOS設備進行性能測試?

Timer Profile

相關文章
相關標籤/搜索