iOS面試題

1.描述什么是MVC

【MVC簡介】

是一種架構(gòu)模式幔妨,它是蘋果非常熱衷的一種架構(gòu)模式

M:model模型保存所有應(yīng)用程序里要使用的數(shù)據(jù)侮穿,比如一款太空大戰(zhàn)游戲,模型要負責保存飛船的大小、飛行速度耕渴、位置信息、裝載了多少只槍等等這些信息邻吞。并且要處理數(shù)據(jù)之間的邏輯比如飛船要打中敵機多少次能把敵機擊落

模型只是負責記錄數(shù)據(jù)组题,跟數(shù)據(jù)的顯示是沒關(guān)系的,數(shù)據(jù)的顯示是控制器跟視圖的任務(wù)

C:controller控制器負責控制視圖如何去顯示模型里要顯示的數(shù)據(jù)它要負責把模型里的數(shù)據(jù)傳輸給視圖(控制器是通過視圖控制器的【生命周期】來控制視圖變化的)

V:view視圖視圖就是視圖控制器的小跟班抱冷,它的任務(wù)就是負責顯示視圖崔列,完全聽命于視圖控制器,視圖控制器讓視圖做什么視圖就做什么

2.列舉常用網(wǎng)絡(luò)協(xié)議的端口號旺遮,例如HTTP默認的是80

FTP文本傳輸協(xié)議20或21

TELNET遠程登錄協(xié)議23

POP3發(fā)郵件協(xié)議110

3赵讯、frame與bounds的區(qū)別?Bounds的大小改變frame改變嗎

答:frame指的是:該view在父view坐標系統(tǒng)中的位置和大小耿眉。(參照點是父親的坐標系統(tǒng))

bounds指的是:該view在本身坐標系統(tǒng)中的位置和大小边翼。(參照點是本身坐標系統(tǒng))

會發(fā)生改變

4、UIViewController的生命周期方法調(diào)用順序

答:-

(void)viewDidLoad跷敬;

- (void)viewDidUnload讯私;

- (void)viewWillAppear:(BOOL)animated;

- (void)viewDidAppear:(BOOL)animated西傀;

- (void)viewWillDisappear:(BOOL)animated斤寇;

- (void)viewDidDisappear:(BOOL)animated;

5拥褂、UITableView的執(zhí)行流程是怎么樣的

答:"numberOfSectionsInTableView:"返回TableView的section數(shù)目

"tableView:titleForHeaderInSection:"section1是否有表頭標題欄

"tableView:numberOfRowsInSection:"設(shè)置section1中行數(shù)

"tableView:heightForRowAtIndexPath:"設(shè)置section1中row1行的高度……row2行的高度……逐行設(shè)置娘锁,直至當前section1屬性設(shè)置完畢

"tableView:titleForHeaderInSection:"section2是否有表頭欄,之后同4-5饺鹃,設(shè)置section2的屬性.同理莫秆,設(shè)置完畢所有的section的相關(guān)屬性

"tableView:cellForRowAtIndexPath:"接下來設(shè)置的是每個section中每row添加的數(shù)據(jù)

這樣整個TableView就設(shè)置完畢了.

6、如何設(shè)計一個可變高度(根據(jù)內(nèi)容自適應(yīng)高度)的UITableViewCell

答:1)創(chuàng)建并添加一個UILabel作為單元格cell的子視圖悔详;

2)在UITableView的委托方法:

(CGFloat)tableView:(UITableView*)tableViewheightForRowAtIndexPath: (NSIndexPath

*) indexPath中計算高度

3)在UITableView的委托方法:

(UITableViewCell*)tableView:(UITableView*)tableViewcellForRowAtIndexPath:

(NSIndexPath *) indexPath中計算UILabel的框大小镊屎。

7、UIView的圓角屬性設(shè)置方法

答:利用setCornerRadius:

8.UIVIiewController在現(xiàn)實過程中茄螃,各個方法的調(diào)用順序

init->viewDidLoad->viewDidAppear->viewDidUnload

9.對于語句NSString *obj = [[NSData

alloc]init],obj在編譯時和運行時分別是什么類型的對象缝驳?

答:編譯時為NSString類型,運行時為NSData類型归苍。

10.object-c中創(chuàng)建線程的方法是什么用狱?如果在主線程中執(zhí)行代碼,方法是什么拼弃?如果想延時執(zhí)行代碼夏伊,方法又是什么?

答:a吻氧、線程創(chuàng)建有三種方法:使用NSThread創(chuàng)建(detachNewThreadSelector:toTarget:withObject:)溺忧、使用GCD的dispatch咏连、使用子類化的NSOperation,然后將其加入NSOperationQueue;

b、在主線程執(zhí)行代碼砸狞,方法是performSelectorOnMainThread捻勉,

c、如果想延時執(zhí)行代碼可以用performSelector:withObject:afterDelay:

11.描述一下iOS SDKSDK中如何實現(xiàn)MVC的開發(fā)模式刀森?

答:iOS開發(fā)中使用了很好的分層設(shè)計踱启,數(shù)據(jù)都可以放在自定義類型、NSArray及其子類型研底、NSDictionary及其子類型中埠偿,視圖的顯示都用UIView及其子類來實現(xiàn),控制器在UIViewController的子類中實現(xiàn)榜晦,在控制器的ViewDidLoad冠蒋、ViewWillAppear、ViewDidAppear乾胶、ViewDidDisappear抖剿、ViewWillDisappear等方法中實現(xiàn)數(shù)據(jù)和視圖的交互。

12识窿、MVC設(shè)計模式是如何體現(xiàn)在iOS

Appkai'fa開發(fā)中的斩郎?三者之間有哪些常見消息傳遞方式?

答:iOS開發(fā)中使用了很好的分層設(shè)計喻频,數(shù)據(jù)都可以放在自定義類型缩宜、NSArray及其子類型、NSDictionary及其子類型中甥温,視圖的顯示都用UIView及其子類來實現(xiàn)锻煌,控制器在UIViewController的子類中實現(xiàn),在控制器的ViewDidLoad姻蚓、ViewWillAppear宋梧、ViewDidAppear、ViewDidDisappear狰挡、ViewWillDisappear等方法中實現(xiàn)數(shù)據(jù)和視圖的交互捂龄。三者之間常見消息傳遞方式有:代理、通知中心圆兵、kvc/kvo等跺讯。

13.關(guān)于自定義Cell中枢贿,圖片下載用到的方法?

如果有添加了第三方庫SDWebImage/AFNetWorking殉农,可以使用UIImageView的類別方法setImageWithURL:直接異步加載,如果沒有的話可以使用NSURLConnection發(fā)起request請求局荚,或者使用ASI將下載請求添加到下載隊列中超凳,將圖片下載之后愈污,在回調(diào)方法里,回調(diào)主線程轮傍,設(shè)置圖片暂雹。

14.UITableViewCell怎樣使用更流暢?

首先cell的復用機制節(jié)約了系統(tǒng)資源创夜;其次應(yīng)當注意有些復雜的大數(shù)據(jù)或網(wǎng)絡(luò)數(shù)據(jù)應(yīng)采用異步加載的方式進行加載杭跪,以免cell刷出時發(fā)生卡頓。

15.在UIWebView上點擊回復驰吓,如何使用UITextField進行回復涧尿?

UIWebView有一個stringByEvaluatingJavaScriptFromString方法可以將javascript嵌入頁面中,通過這個方法我們可以在iOS中與UIWebView中的網(wǎng)頁元素交互檬贰。通過JAVAScript獲取點擊時間姑廉,彈出UITextField,輸入字符串后翁涤,可以通過post請求發(fā)送回復桥言。

16.關(guān)于圖文混排是如何排版的?

圖文混排應(yīng)當以圖片為起點葵礼,首先明確圖片的位置号阿,文字可以選擇位于圖片的下方,或者是環(huán)繞效果章咧。環(huán)繞效果可以采用2個以上label或textView來實現(xiàn)倦西;也可以通過AttributeString的屬性設(shè)置,或者CoreText重繪UIVIew赁严,添加文字的方式扰柠,修改文字間的間隔,達到讓出圖片的效果疼约。如果圖文顯示在高度可變的視圖中卤档,如tableView的Cell中,可以計算文字占位Rect程剥,動態(tài)修改視圖或cell的高度劝枣。

17.@property (nonatomic, retain)

IBOutlet UIView * view這個對象需要release嗎,如果需要织鲸,如何做?

其實XIB文件所生成的視圖對象是無法真正釋放的舔腾,因此關(guān)聯(lián)XIB的屬性也可以設(shè)置為assign屬性,而視圖不會釋放搂擦。從這個角度上講稳诚,這個對象不釋放也可以,但是既然用retain做修飾符瀑踢,出于尊重內(nèi)存管理法則扳还,理應(yīng)進行釋放才避,最簡單的方式就是將視圖在dealloc方法中設(shè)為nil,適用于非ARC氨距,但ARC中這樣寫也沒關(guān)系桑逝。

18.兩種傳輸協(xié)議在什么時候使用?

所謂的兩種傳輸協(xié)議俏让,是指網(wǎng)絡(luò)協(xié)議中的傳輸層協(xié)議楞遏,即TCP協(xié)議和UDP協(xié)議。TCP協(xié)議會在收發(fā)數(shù)據(jù)的兩端建立穩(wěn)定可靠首昔,有序的鏈接橱健,傳輸數(shù)據(jù)穩(wěn)定可靠,但系統(tǒng)資源消耗較大沙廉,適合拘荡,數(shù)據(jù)或文件的下載或上傳,Http網(wǎng)絡(luò)協(xié)議就是采用TCP傳輸協(xié)議傳輸數(shù)據(jù)的撬陵。UDP是通俗講得漂流瓶協(xié)議珊皿,發(fā)出協(xié)議的主機就像扔出漂流瓶的魯濱遜一樣,不再負責數(shù)據(jù)的跟蹤和校驗巨税,優(yōu)點是系統(tǒng)資源占用低蟋定,缺陷是沒有在收發(fā)兩端建立穩(wěn)定的傳輸路線,數(shù)據(jù)有丟包草添,損壞或后發(fā)先至等缺陷驶兜,優(yōu)秀的UDP傳輸服務(wù)器,會反復發(fā)送校驗序列远寸,以保證數(shù)據(jù)的正確抄淑。

19.push推送機制

iOS在系統(tǒng)級別有一個推送服務(wù)程序使用5223端口。使用這個端口的協(xié)議源于Jabber后來發(fā)展為XMPP驰后,被用于Gtalk等IM軟件中肆资。所以,iOS的推送灶芝,可以不嚴謹?shù)睦斫鉃椋?/p>

蘋果服務(wù)器朝手機后臺掛的一個IM服務(wù)程序發(fā)送的消息郑原。

然后,系統(tǒng)根據(jù)該IM消息識別告訴哪個Apps具體發(fā)生了什么事夜涕。

然后犯犁,系統(tǒng)分別通知這些Apps。

20.iOS播放音頻的幾種方法?

iPhone OS主要提供以下了幾種播放音頻的方法:

System Sound Services

AVAudioPlayer類

Audio Queue Services

OpenAL

21.代理的作用

代理的目的是改變或傳遞控制鏈女器。允許一個類在某些特定時刻通知到其他類酸役,而不需要獲取到那些類的指針∠埽可以減少框架復雜度簇捍。

另外一點,代理可以理解為java中的回調(diào)監(jiān)聽機制的一種類似俏拱。

22.intretVal=UIApplication(argc,argv,nil,nil):是什么意思

對UIApplication對象進行了初始化暑塑,這個方法除了argc和argv參數(shù)外,另外這個函數(shù)還有2個兩個字符串參數(shù)來識別UIApplication類和UIApplication代理類锅必,在這里默認是2個nil,第一個參數(shù)為nil就默認把UIApplication類作為缺省值進行初始化事格,可以在這里不填nil而是使用自己定義的UIApplication子類。至于第二個參數(shù)nil就設(shè)置為nil就把模板生成的HelloWorldAppdelegate類作為默認值搞隐。

23.保存一個變量到本地驹愚,列舉兩個簡單的方法

1,用NSUserDefaults存儲小量數(shù)據(jù)

2劣纲,直接writeTofF ile

3逢捺,存數(shù)據(jù)庫

4,歸檔

24.如果UIView *

view已經(jīng)實例化癞季,在view僅添加了n個UIButton類的實例劫瞳,這些button不是全局的,并且button已經(jīng)用tag區(qū)分開绷柒,如何快速找出指定的一個button改變他的屬性志于?

button=(UIButton*)[view viewWithTag:tag]

25.當A類 中的某個方法執(zhí)行到某處時,這時想在B類中執(zhí)行某個方法伸刃,如何做颤练?并做簡單說明

用代理執(zhí)行代理方法

說明:在b類中實現(xiàn)協(xié)議方法慈迈,設(shè)置a的代理為b,在指定方法內(nèi)調(diào)用代理的協(xié)議方法

26.oc中加號方法與減號方法的區(qū)別

加號方法是類方法奈应,用類名直接調(diào)用

減號方法為實例方法,需要創(chuàng)建一個實例對象調(diào)用

27.建一個工程用到的最基本的兩個框架是购披?

FoundationUIKit

28钥组,一個UITableview的實例,重新加載數(shù)據(jù)的方法是什么今瀑?

reloadData刷新整個表格和reloadSections:withRowAnimation刷新一組數(shù)據(jù)

29.XML有哪幾種解析方式程梦,他們各有什么優(yōu)點

答:有Sax和Dom兩種解析方式,sax是逐行解析橘荠。dom是一次性全部加載xml文件屿附,然后解析

29.iOS平臺怎么做數(shù)據(jù)持久化

有以下方式做

1、NSUserDefaults

2哥童、Plist

3挺份、數(shù)據(jù)庫

4、文件保存

5贮懈、歸檔與反歸檔

30.intretVal=UIApplication(argc,argv,nil,nil):是什么意思

對UIApplication對象進行了初始化匀泊,這個方法除了argc和argv參數(shù)外优训,另外這個函數(shù)還有2個兩個字符串參數(shù)來識別UIApplication類和UIApplication代理類,在這里默認是2個nil,第一個參數(shù)為nil就默認把UIApplication類作為缺省值進行初始化各聘,可以在這里不填nil而是使用自己定義的UIApplication子類揣非。至于第二個參數(shù)nil就設(shè)置為nil就把模板生成的HelloWorldAppdelegate類作為默認值。

31.iOS平臺怎么做數(shù)據(jù)的持久化?Core Data和SQLite有無必然聯(lián)系躲因?Core Data是一個關(guān)系型數(shù)據(jù)庫嗎早敬?

答:iOS中可以有四種持久化數(shù)據(jù)的方式: 屬性列表、對象歸檔大脉、SQLite3和Core Data

Core data與sqlite還是有聯(lián)系的搞监,core

data是對sqlite的封裝,因為sqlite是c語言的api镰矿,然而有人也需要obj-c的api琐驴,所以有了core data另外,core data不僅僅是把c的api翻譯成oc的api秤标,還提供了一些管理的功能棍矛,使用更加方便

Core

Data不是一個關(guān)系型數(shù)據(jù)庫,也不是關(guān)系型數(shù)據(jù)庫管理系統(tǒng)(RDBMS)抛杨。雖然Core Dta支持SQLite作為一種存儲類型够委,但它不能使用任意的SQLite數(shù)據(jù)庫。Core Data在使用的過程種自己創(chuàng)建這個數(shù)據(jù)庫怖现。Core Data支持對一茁帽、對多的關(guān)系

32.runloop是什么?在主線程中的某個函數(shù)里調(diào)用了異步函數(shù)屈嗤,怎么樣block當前線程潘拨,且還能響應(yīng)timer事件,touch事件等饶号?

RunLoop

RunLoop從字面上看是運行循環(huán)的意思,這一點也不錯,它確實就 是一個循環(huán)的概念,或者準確的說是線程中的循環(huán)铁追。 本文一開始就 提到有些程序是一個圈,這個圈本質(zhì)上就是這里的所謂的RunLoop,就是一個循環(huán),只是這個循環(huán)里加入很多特性。 首先循環(huán)體的開始需要檢測是否有需要處理的事件,如果有則去處理,如果沒有則進入睡眠以節(jié)省CPU時間茫船。 所以重點便是這個需要處理的事件,在RunLoop中,需要處理的事件分兩類,一種是輸入 源,一種是定時器,定時器好理解就是那些需要定時執(zhí)行的操作,

輸入源分三類:performSelector源,基于端口(Mach port)的源,以及自定義的源琅束。編程的時候可以添加自己的源。RunLoop還有一 個觀察者Observer的概念,可以往RunLoop中加入自己的觀察者以 便監(jiān)控著RunLoop的運行過程,CFRunLoop.h中定義了所有觀察者的

類型:1enumCFRunLoopActivity { kCFRunLoopEntry = (1 << 0), kCF

RunLoopBeforeTimers = (1 << 1),kCFRunLoopBeforeSour

ces = (

如果你使用過select系統(tǒng)調(diào)用寫過程序你便可以快速的理解runloop事

件源的概念,本質(zhì)上講事件源的機制和select一樣是一種多路復用IO的實現(xiàn),在一個線程中我們需要做的事情并不單一,如需要處理定時鐘事件,需要處理用戶的觸控事件,需要接受網(wǎng)絡(luò)遠端發(fā)過來的 數(shù)據(jù),將這些需要做的事情統(tǒng)統(tǒng)注 冊到事件源中,每一次循環(huán)的開 始便去檢查這些事件源是否有需要處理的數(shù)據(jù),有的話則去處理算谈。 拿具體的應(yīng)用舉個例子,NSURLConnection網(wǎng)絡(luò)數(shù)據(jù)請求,默認是 異步的方式,其實現(xiàn)原理就是創(chuàng)建之后將其作為事件源加入到當前的RunLoop,而等待網(wǎng)絡(luò)響應(yīng)以及網(wǎng)絡(luò)數(shù)據(jù)接受的過程則在一個新創(chuàng)建的獨立的線程中完成,當這個線程處理到某個階段的時候比如 得到對方的響應(yīng)或者接受完 了網(wǎng)絡(luò)數(shù)據(jù)之后便通知之前的線程去執(zhí)行其相關(guān)的delegate方法涩禀。所以在Cocoa中經(jīng)橙谎郏看到scheduleInRunLoop:forMode:這樣的方法,這個便是將其加入到事件 源中,當檢測到某個事件發(fā)生的時候,相關(guān)的delegate方法便被調(diào)用艾船。對于CoreFoundation這一層而 言,通常的模式是創(chuàng)建輸入源,然后 將輸入源通過CFRunLoopAddSource函數(shù)加入到RunLoop中,相關(guān)事件發(fā)生后,相關(guān)的回調(diào)函數(shù)會被調(diào)用。如CFSocket的使用。 另外RunLoop中還有一個運行模式的概念,每一個運行循環(huán)必然運行在 某個模式下,而模式的存在是為了過濾事件源和觀察者的,只有那 些和當前RunLoop運行模式一致的事件源和觀察者才會被激活屿岂。 每一個線程都有其對應(yīng)的RunLoop,但是默認非主線程的RunLoop是沒有運行的,需要為RunLoop添加至少一個事件源,然后去run它践宴。一般情況下我們是沒有必要去啟用線程的RunLoop的,除非你 在一個單獨的線程中需要長久的檢測某個事件。

33.使用UITableView必須要實現(xiàn)的兩個方法?

- (NSInteger)tableView:(UITableView*)tableView numberOfRowsInSection:(NSInteger)section,-

(UITableViewCell*)tableView:(UITableView*)tableView cellForRowAtIndexPath:(NSIndexPath*)indexPath

34.簡述以下在iOS中使用SQLIte

_fmdb= [[FMDatabasealloc]initWithPath:path];

[_fmdbopen];

[_fmdbexecuteUpdate:@"create

table Article(ArticleId integer primary key autoincrement,ArticleTitle

text,ArticleContent text)"];

[_fmdbclose];

35.設(shè)計一個新聞瀏覽需要用到哪些技術(shù)

網(wǎng)絡(luò)下載爷怀,數(shù)據(jù)解析阻肩,表單控件等

36.談?wù)勀銓Χ嗑€程的理解

iOS多線程分為三種NSThread,NSOperation霉撵,GCD,NSThread以線程為導向洪囤,NSOperation以任務(wù)為導向徒坡,GCD是Block模式的NSOperation

36.ViewController的loadView,viewDidLoad瘤缩,viewDidUnload分別是在什么時候調(diào)用的喇完?在自定義ViewController的時候這幾個函數(shù)里面應(yīng)該做做什么工作?

loadView:

每次訪問UIViewController的view(比如controller.view剥啤、self.view)而且view為nil锦溪,loadView方法就會被調(diào)用。

自定義UIViewController的view用的

viewDidLoad:

無論你是通過xib文件還是重寫loadView方法創(chuàng)建UIViewController的view府怯,在view創(chuàng)建完畢后刻诊,最終都會調(diào)用viewDidLoad方法

一般我們會在這里做界面上的初始化操作,比如往view中添加一些子視圖牺丙、從數(shù)據(jù)庫或者網(wǎng)絡(luò)加載模型數(shù)據(jù)裝配到子視圖中则涯。

viewDidUnload:

發(fā)出內(nèi)存警告且view被釋放的時候就會調(diào)用viewDidUnload方法

一般在此釋放資源,主要是釋放界面元素相關(guān)的資源冲簿,將相關(guān)的實例都賦值為nil

37.你用過NSOperationQueue么粟判?如果用過或者了解的話,你為什么要使用NSOperationQueue峦剔,實現(xiàn)了什么档礁?請描述它和GCD的區(qū)別和類似的地方(提示:可以從兩者的實現(xiàn)機制和適用范圍來描述)。

使用NSOperationQueue用來管理子類化的NSOperation對象吝沫,控制其線程并發(fā)數(shù)目呻澜。GCD和NSOperation都可以實現(xiàn)對線程的管理,區(qū)別是NSOperation和NSOperationQueue是多線程的面向?qū)ο蟪橄蟛蚁铡m椖恐惺褂肗SOperation的優(yōu)點是NSOperation是對線程的高度抽象易迹,在項目中使用它,會使項目的程序結(jié)構(gòu)更好平道,子類化NSOperation的設(shè)計思路睹欲,是具有面向?qū)ο蟮膬?yōu)點(復用、封裝),使得實現(xiàn)是多線程支持窘疮,而接口簡單袋哼,建議在復雜項目中使用。

項目中使用GCD的優(yōu)點是GCD本身非常簡單闸衫、易用涛贯,對于不復雜的多線程操作,會節(jié)省代碼量蔚出,而Block參數(shù)的使用弟翘,會是代碼更為易讀,建議在簡單項目中使用骄酗。

38.談?wù)剬wift的看法

Swift作為Apple欽定的objc的繼承者稀余,作為iOS/Mac開發(fā)者的話,是覺得必須和值得學習和使用的∏鞣現(xiàn)在Swift可以和原來的objc或者c系的代碼混用睛琳。因為在很多語法特性上Swift確實和一些腳本非常相似。但是首先需要明確的是踏烙,至少在Apple開發(fā)中师骗,Swift不是以一種腳本語言來運行的,所有的Swift代碼都將被LLVM編譯為native code讨惩,以極高的效率運行辟癌。按照官方今天給出的benchmark數(shù)據(jù),運行時比Python快3.9倍荐捻,比objc快1.4倍左右愿待。我相信官方數(shù)據(jù)肯定是有些水分,但是即使這樣靴患,Swift也給人帶來很多遐想和期待仍侥。Swift和原來的objc一樣,是類型安全的語言鸳君,變量和方法都有明確的返回农渊,并且變量在使用前需要進行初始化。而在語法方面或颊,Swift遷移到了業(yè)界公認的非常先進的語法體系砸紊,其中包含了閉包,多返回囱挑,泛型和大量的函數(shù)式編程的理念醉顽,函數(shù)也終于成為一等公民可以作為變量保存了(雖然具體實現(xiàn)和用法上來看和js那種傳統(tǒng)意義的好像不太一樣)。初步看下來語法上借鑒了很多Ruby的人性化的設(shè)計平挑,但是借助于Apple自己手中強大的LLVM游添,性能上必須要甩開Ruby不止一兩個量級系草。

另一方面,Swift的代碼又是可以Interactive來“解釋”執(zhí)行的唆涝。新的Xcode中加入了所謂的Playground來對開發(fā)者輸入的Swift代碼進行交互式的相應(yīng)找都,開發(fā)者也可是使用swift的命令行工具來交互式地執(zhí)行swift語句。細心的朋友可能注意到了廊酣,我在這里把“解釋”兩個字打上了雙引號能耻。這是因為即使在命令行中,Swift其實也不是被解釋執(zhí)行的亡驰,而是在每個指令后進對從開始以來的swift代碼行了一遍編譯晓猛,然后執(zhí)行的。這樣的做法下依然可以讓人“感到”是在做交互解釋執(zhí)行凡辱,這門語言的編譯速度和優(yōu)化水平戒职,可見一斑。同時Playground還順便記錄了每條語句的執(zhí)行時候的各種情況煞茫,叫做一組timeline帕涌∩惴玻可以使用timeline對代碼的執(zhí)行逐步檢查续徽,省去了斷點debug的時間,也非常方便亲澡。

39.簡述一下IOS中線程同步機制

1:原子操作不同線程如果通過原子操作函數(shù)對同一變量進行操作钦扭,可以保證一個線程的操作不會影響到其他線程內(nèi)對此變量的操作,因為這些操作都是原子式的床绪。因為原子操作只能對內(nèi)置類型進行操作客情,所以原子操作能夠同步的線程只能位于同一個進程的地址空間內(nèi)。2:鎖iOS平臺下的鎖對象為NSLock對象癞己,進入鎖通過調(diào)用lock函數(shù)膀斋,解鎖調(diào)用unlock函數(shù)(因為iOS中大部分的線程同步類都繼承自NSLocking協(xié)議,所以其加鎖/解鎖的操作基本都為lock/unlock函數(shù))痹雅,同一個NSLock對象成功調(diào)用lock函數(shù)后仰担,在其顯式unlock之前任何線程都不能再對此NSLock對象加鎖,以達到互斥訪問的目的绩社。3:事件NSConditon類型提供了wait與signal函數(shù)摔蓝,分別代表了等待事件的操作以及觸發(fā)事件的操作。除了wait函數(shù)愉耙,NSCondition還提供了waitUntilDate函數(shù)贮尉,其功能與NSLock中的lockBeforeDate大致相同,簡要來說就是提供了一個帶超時的wait函數(shù)朴沿。

40.啟動一個線程猜谚,在子線程中如何刷新界面败砂。

可以跳轉(zhuǎn)到主線程中進行界面的刷新,如[selfperformSelectorOnMainThread:@selector(updateUI) withObject:nilwaitUntilDone:YES];

41.簡述開發(fā)中使用過的設(shè)計模式龄毡。

(一)代理模式

應(yīng)用場景:當一個類的某些功能需要由別的類來實現(xiàn)吠卷,但是又不確定具體會是哪個類實現(xiàn)。

優(yōu)勢:解耦合

敏捷原則:開放-封閉原則

實例:tableview的數(shù)據(jù)源delegate沦零,通過和protocol的配合祭隔,完成委托訴求。

列表row個數(shù)delegate

自定義的delegate

(二)觀察者模式

應(yīng)用場景:一般為model層對路操,controller和view進行的通知方式疾渴,不關(guān)心誰去接收,只負責發(fā)布信息屯仗。

優(yōu)勢:解耦合

敏捷原則:接口隔離原則搞坝,開放-封閉原則

實例:Notification通知中心,注冊通知中心魁袜,任何位置可以發(fā)送消息桩撮,注冊觀察者的對象可以接收。

kvo峰弹,鍵值對改變通知的觀察者店量,平時基本沒用過。

(三)MVC模式

應(yīng)用場景:是一中非常古老的設(shè)計模式鞠呈,通過數(shù)據(jù)模型融师,控制器邏輯,視圖展示將應(yīng)用程序進行邏輯劃分蚁吝。

優(yōu)勢:使系統(tǒng)旱爆,層次清晰,職責分明窘茁,易于維護

敏捷原則:對擴展開放-對修改封閉

實例:model-即數(shù)據(jù)模型怀伦,view-視圖展示,controller進行UI展現(xiàn)和數(shù)據(jù)交互的邏輯控制山林。

(四)單例模式

應(yīng)用場景:確保程序運行期某個類房待,只有一份實例,用于進行資源共享控制捌朴。

優(yōu)勢:使用簡單吴攒,延時求值,易于跨模塊

敏捷原則:單一職責原則

實例:[UIApplication sharedApplication]砂蔽。

注意事項:確保使用者只能通過getInstance方法才能獲得洼怔,單例類的唯一實例。

java左驾,C++中使其沒有公有構(gòu)造函數(shù)镣隶,私有化并覆蓋其構(gòu)造函數(shù)极谊。

object c中,重寫allocWithZone方法安岂,保證即使用戶用alloc方法直接創(chuàng)建單例類的實例轻猖,

返回的也只是此單例類的唯一靜態(tài)變量。

(五)策略模式

應(yīng)用場景:定義算法族域那,封裝起來咙边,使他們之間可以相互替換。

優(yōu)勢:使算法的變化獨立于使用算法的用戶

敏捷原則:接口隔離原則次员;多用組合败许,少用繼承;針對接口編程淑蔚,而非實現(xiàn)市殷。

實例:排序算法,NSArray的sortedArrayUsingSelector刹衫;經(jīng)典的鴨子會叫醋寝,會飛案例。

注意事項:1带迟,剝離類中易于變化的行為音羞,通過組合的方式嵌入抽象基類

2,變化的行為抽象基類為邮旷,所有可變變化的父類

3黄选,用戶類的最終實例蝇摸,通過注入行為實例的方式婶肩,設(shè)定易變行為

防止了繼承行為方式,導致無關(guān)行為污染子類貌夕。完成了策略封裝和可替換性律歼。

(六)工廠模式

應(yīng)用場景:工廠方式創(chuàng)建類的實例,多與proxy模式配合啡专,創(chuàng)建可替換代理類险毁。

優(yōu)勢:易于替換,面向抽象編程们童,application只與抽象工廠和易變類的共性抽象類發(fā)生調(diào)用關(guān)系畔况。

敏捷原則:DIP依賴倒置原則

實例:項目部署環(huán)境中依賴多個不同類型的數(shù)據(jù)庫時,需要使用工廠配合proxy完成易用性替換

注意事項:項目初期慧库,軟件結(jié)構(gòu)和需求都沒有穩(wěn)定下來時跷跪,不建議使用此模式,因為其劣勢也很明顯齐板,

增加了代碼的復雜度吵瞻,增加了調(diào)用層次葛菇,增加了內(nèi)存負擔。所以要注意防止模式的濫用橡羞。

42.UIViewController中的viewDidLoad,viewWillAppear,viewDidUnload,dealloc分別是在什么時候調(diào)用眯停?

viewDidLoad:方法

在視圖加載后被調(diào)用:

如果是在代碼中創(chuàng)建的視圖加載器,他將會在loadView方法后被調(diào)用卿泽;

如果是從nib視圖頁面輸出莺债,他將會在視圖設(shè)置好后后被調(diào)用。

重載重寫該方法以進一步定制view

在iPhone OS 3.0及之后的版本中签夭,還應(yīng)該重載重寫viewDidUnload來釋放對view的任何索引

viewDidLoad后調(diào)用數(shù)據(jù)Model

viewWillAppear:方法

Called when the view is about to made visible. Defaultdoes nothing

視圖即將可見時調(diào)用九府。默認情況下不執(zhí)行任何操作viewDidUnload:方法

當系統(tǒng)內(nèi)存吃緊的時候會調(diào)用該方法(注:viewController沒有被dealloc)

內(nèi)存吃緊時,在iPhone OS 3.0之前didReceiveMemoryWarning是釋放無用內(nèi)存的唯一方式覆致,但是OS

3.0及以后viewDidUnload方法是更好的方式

在該方法中將所有IBOutlet(無論是property還是實例變量)置為nil(系統(tǒng)release

view時已經(jīng)將其release掉了)

在該方法中釋放其他與view有關(guān)的對象侄旬、其他在運行時創(chuàng)建(但非系統(tǒng)必須)的對象、在viewDidLoad中被創(chuàng)建的對象煌妈、緩存數(shù)據(jù)等release對象后儡羔,將對象置為nil(IBOutlet只需要將其置為nil,系統(tǒng)release

view時已經(jīng)將其release掉了)

一般認為viewDidUnload是viewDidLoad的鏡像璧诵,因為當view被重新請求時汰蜘,viewDidLoad還會重新被執(zhí)行

viewDidUnload中被release的對象必須是很容易被重新創(chuàng)建的對象(比如在viewDidLoad或其他方法中創(chuàng)建的對象),不要release用戶數(shù)據(jù)或其他很難被重新創(chuàng)建的對象

dealloc:方法

viewDidUnload和dealloc方法沒有關(guān)聯(lián)之宿,dealloc還是繼續(xù)做它該做的事情

43.navigationbar的背景顏色設(shè)置

UINavigationController* nav =[[UINavigationController alloc] init];

self.nav.navigationBar.tintColor =[UIColor blackColor];

44.tableviewcell的那幾個函數(shù)

// Designated initializer.If the cell can be reused, you must pass in areuse identifier.You should use thesame reuse identifier for all cells of the same form.

-(id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString*)reuseIdentifier

- (void)prepareForReuse;// if the cell is reusable (has a reuse identifier), this is called justbefore the cell is returned from the table view methoddequeueReusableCellWithIdentifier:.Ifyou override, you MUST call super.

- (void)setSelected:(BOOL)selectedanimated:(BOOL)animated;// animate between regular and selected state

-(void)setHighlighted:(BOOL)highlighted animated:(BOOL)animated;// animate between regular andhighlighted state

- (void)setEditing:(BOOL)editinganimated:(BOOL)animated;

45.還有動畫

在iOS中動畫實現(xiàn)技術(shù)主要是:Core Animation族操。

Core Animation負責所有的滾動、旋轉(zhuǎn)比被、縮小和放大以及所有的iOS動畫效果色难。其中UIKit類通常都有animated:參數(shù)部分,它可以允許是否使用動畫等缀。

Core Animation主要是使用

我們知道每個UIView都關(guān)聯(lián)到一個CALayer對象枷莉,CALayer是Core Animation中的圖層。

Core Animation主要就是通過修改圖層來改變UI的大小尺迂,位置笤妙,從而實現(xiàn)動畫效果。

可以說噪裕,任何一個應(yīng)用程序都離不開動畫蹲盘!

就連蘋果各個UI控件中的切換操作,都有它內(nèi)在的動畫膳音。

了解一下召衔,關(guān)于動畫的一些知識。

任何知識點严蓖,都會遷出一系列的知識點薄嫡。

[UIViewbeginAnimations:@"dropDownloadLabel"context:UIGraphicsGetCurrentContext()];

[UIView setAnimationDuration: 0.5];

[UIViewsetAnimationBeginsFromCurrentState: NO];

//執(zhí)行的動畫code

[UIView commitAnimations];

就將這段段代碼作為知識的切入點氧急,開始了解吧。

[UIViewbeginAnimations:@"dropDownloadLabel"context:UIGraphicsGetCurrentContext()];

[UIView commitAnimations];

這兩句代碼毫深,標記了一個動畫的開始和結(jié)束吩坝。在中間我們可以寫我們的一些動畫操作!

beginAnimations方法

+ (void)beginAnimations:(NSString*)animationID context:(void *)context

用來哑蔫,表示動畫的開始钉寝。

animationID:作為動畫的標識

context:自定義的一些動畫數(shù)據(jù),這些數(shù)據(jù)將發(fā)送給動畫的代理方法:setAnimationWillStartSelector:方法和setAnimationDidStopSelector:方法闸迷。

這個嵌纲,參數(shù),通常為nil腥沽。我們可以直接設(shè)置為nil逮走。

這里,我們使用UIGraphicsGetCurrentContext()今阳;因為此方法默認也會返回nil师溅。

該方法告訴系統(tǒng),我們將開始動畫盾舌。并且墓臭,在該方法后,我們可以通過setAnimationXXX(一系列方法)來設(shè)置我們進行的動畫的一些參數(shù)妖谴。

完成動畫后窿锉,調(diào)用commitAnimations方法來通知系統(tǒng),動畫結(jié)束膝舅。

至此嗡载,我們知道,就是設(shè)置動畫的一些列參數(shù)的方法即setAnimationXXX方法铸史。

[UIView setAnimationDuration: 0.5];

[UIViewsetAnimationBeginsFromCurrentState: NO];

動畫是可以嵌套的鼻疮。

[UIViewbeginAnimations:@"animation_1"context:UIGraphicsGetCurrentContext()];

// code1

[UIViewbeginAnimations:@"animation_2"context:UIGraphicsGetCurrentContext()];

// code2

[UIView commitAnimations];

[UIView commitAnimations];

如果我們?yōu)閯赢嬙O(shè)置了怯伊,setAnimationWillStartSelector:方法和setAnimationDidStopSelector:方法琳轿。

那么當動畫開始或者停止的時候,動畫的animationID參數(shù)和context參數(shù)耿芹,會傳遞給setAnimationWillStartSelector:方法和setAnimationDidStopSelector:方法崭篡。

悲劇總是要發(fā)生的!

蘋果API在最后的描述中吧秕,給了這么一句話:

Use of this method is discouraged iniOS 4.0 and later. You should use the block-based animation methods to specifyyour animations instead.

可見琉闪,在iOS 4.0后,block語法砸彬,大大增多了颠毙。這種方式斯入,是不建議的,需要我們使用block的方式蛀蜜。

于是刻两,動畫的block方式:

[UIView animateWithDuration:0.3fdelay:0.0f options:UIViewAnimationOptionCurveLinear

animations:^{ //執(zhí)行的動畫code}

completion:^(BOOLfinished){

//完成后執(zhí)行code

}];

在盡量用block來完成動畫,因為說不定啥時候滴某,老的動畫方式磅摹,將被廢除。

到此霎奢,可以告一段落户誓。但是,我想將這簡單的動畫代碼幕侠,一查到底帝美!

commitAnimations方法:

+ (void)commitAnimations

標記動畫結(jié)束。與beginAnimations方法成對使用晤硕。

例如:

[UIView commitAnimations];

一系列的setAnimationXXX方法:

setAnimationDuration方法:

+(void)setAnimationDuration:(NSTimeInterval)duration

設(shè)置動畫持續(xù)時間(秒)

例如:

[UIView setAnimationDuration: 0.5];

setAnimationBeginsFromCurrentState方法

+(void)setAnimationBeginsFromCurrentState:(BOOL)fromCurrentState

設(shè)置動畫開始時的狀態(tài)证舟。

我們構(gòu)想一個場景:一般,我們按下一個按鈕窗骑,將會執(zhí)行動畫一次女责。

當YES時:當上一次動畫正在執(zhí)行中,那么當下一個動畫開始時创译,上一次動畫的當前狀態(tài)將成為下一次動畫的開始狀態(tài)抵知。

當NO時:當上一個動畫正在執(zhí)行中,那么當下一個動畫開始時软族,上一次動畫需要先恢復到完成時的狀態(tài)刷喜,然后在開始執(zhí)行下一次動畫。

setAnimationStartDate方法

+ (void)setAnimationStartDate:(NSDate*)startTime

設(shè)置動畫開始時間立砸。

setAnimationDelay方法

+(void)setAnimationDelay:(NSTimeInterval)delay

設(shè)置畫開始的延遲時間(秒)掖疮。

setAnimationCurve方法

+ (void)setAnimationCurve:(UIViewAnimationCurve)curve

設(shè)置動畫的曲線方式(就是動畫的總體變化的時間曲線:開始快最后慢,開始慢最后快颗祝,最后慢浊闪,均勻線性)。

curve參數(shù)如下:

typedef NS_ENUM(NSInteger,UIViewAnimationCurve) {

UIViewAnimationCurveEaseInOut,// slow at beginning and end

UIViewAnimationCurveEaseIn,// slow at beginning

UIViewAnimationCurveEaseOut,// slow at end

UIViewAnimationCurveLinear

};

setAnimationRepeatCount方法

+(void)setAnimationRepeatCount:(float)repeatCount

設(shè)置動畫重復次數(shù)

setAnimationRepeatAutoreverses方法

+(void)setAnimationRepeatAutoreverses:(BOOL)repeatAutoreverses

設(shè)置動畫是否做一次反向的執(zhí)行螺戳。

如果設(shè)置為YES:動畫將執(zhí)行:動畫初始狀態(tài)》動畫》動畫完成狀態(tài)》動畫》動畫初始狀態(tài)搁宾。

如果設(shè)置為NO:默認值

setAnimationsEnabled方法

+(void)setAnimationsEnabled:(BOOL)enabled

設(shè)置動畫是否可用!

YES:默認值倔幼。

NO:動畫效果被禁用

注意:僅僅是動畫是否可用盖腿,在動畫中被改變的UI對象依然是起作用的。僅僅是動畫效果被禁用了。

areAnimationsEnabled方法

+ (BOOL)areAnimationsEnabled

返回動畫效果是否被禁用翩腐。

46.還有一個按著導航欄顏色變亮的

_myNav.navigationBar.translucent =YES;

_myNav.navigationBar.barStyle =UIBarStyleBlack;

47.還有個版本的問題

一鸟款、配置SVN服務(wù)器

1、創(chuàng)建Svn服務(wù)工作路徑同時新建我們的App工程茂卦,入下圖所示欠雌,SVN_Project是SVN服務(wù)的工作路徑,MyProject是我們的iOS工程

2疙筹,在Mac下有自帶的svn服務(wù)功能(Windows下是沒有的)富俄,直接在終端打開svn的服務(wù)即可,在打開服務(wù)的同時指定svn的工作路徑

(1)啟動svn服務(wù)命令:svnserve -d -r工作路徑:

(2)終端截圖如下:

3而咆、svn服務(wù)啟動后霍比,要創(chuàng)建svn管理文件,管理文件有關(guān)于svn的各種配置

(1)在工作目錄中創(chuàng)建管理文件命令:svnadmin create MySVNProject

(2)管理文件創(chuàng)建成功后暴备,其目錄結(jié)構(gòu)如下:

(3)接下來要配置我們的svn,打開conf文件夾如下:

(4)配置svnserve.conf文件悠瞬,把帶一個#的臨時注釋去掉即可:

(5)在passwd中添加用戶名和密碼

(6)authz中是用戶組的管理

二.把工程導入SVN

1.想把我們的工程導入svn的話,需要用到一個工具svnx涯捻,svnx連接svn服務(wù)器浅妆,后面跟的文件是SVN的管理文件,用戶名和密碼就是在配置文件中添加的用戶名和密碼

2.登陸成功以后,導入我們的iOS工程障癌。

三凌外、在Xcode中check out工程(下面用的時Xcode6.1的測試版本)

1.在Welcome Xcode中選中Check out an existing

Project,入下圖所示:

2.連接svn服務(wù)器(ip后面的仍然是svn管理文件):

3、check out工程

4.在本地打開工程涛浙,在Source Control中進行項目的管理

有自己的產(chǎn)品也有外包

編程:

1康辑、給定字符串的長度,還有換行方式算出高度轿亮。

UIFont *font = [UIFont systemFontOfSize:14];

CGSize size = [text sizeWithFont:fontconstrainedToSize:CGSizeMake(140, 1000)lineBreakMode:UILineBreakModeCharacterWrap];

2.寫一個發(fā)送同步http請求疮薇,并獲得返回結(jié)果的方法。

NSMutableURLRequest *request = [[NSMutableURLRequestalloc] init];

[requestsetURL:[NSURL URLWithString:urlStr]];

[requestsetHTTPMethod:@"GET"];

NSData*returnData = [NSURLConnection sendSynchronousRequest:request

returningResponse:nil error:nil];

[requestrelease];

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末我注,一起剝皮案震驚了整個濱河市按咒,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌但骨,老刑警劉巖励七,帶你破解...
    沈念sama閱讀 206,126評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異嗽冒,居然都是意外死亡呀伙,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評論 2 382
  • 文/潘曉璐 我一進店門添坊,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人箫锤,你說我怎么就攤上這事贬蛙∮昱” “怎么了?”我有些...
    開封第一講書人閱讀 152,445評論 0 341
  • 文/不壞的土叔 我叫張陵阳准,是天一觀的道長氛堕。 經(jīng)常有香客問我,道長野蝇,這世上最難降的妖魔是什么讼稚? 我笑而不...
    開封第一講書人閱讀 55,185評論 1 278
  • 正文 為了忘掉前任,我火速辦了婚禮绕沈,結(jié)果婚禮上锐想,老公的妹妹穿的比我還像新娘。我一直安慰自己乍狐,他們只是感情好赠摇,可當我...
    茶點故事閱讀 64,178評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著浅蚪,像睡著了一般藕帜。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上惜傲,一...
    開封第一講書人閱讀 48,970評論 1 284
  • 那天洽故,我揣著相機與錄音,去河邊找鬼盗誊。 笑死收津,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的浊伙。 我是一名探鬼主播撞秋,決...
    沈念sama閱讀 38,276評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼嚣鄙!你這毒婦竟也來了吻贿?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,927評論 0 259
  • 序言:老撾萬榮一對情侶失蹤哑子,失蹤者是張志新(化名)和其女友劉穎舅列,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體卧蜓,經(jīng)...
    沈念sama閱讀 43,400評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡帐要,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,883評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了弥奸。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片榨惠。...
    茶點故事閱讀 37,997評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出赠橙,到底是詐尸還是另有隱情耽装,我是刑警寧澤,帶...
    沈念sama閱讀 33,646評論 4 322
  • 正文 年R本政府宣布期揪,位于F島的核電站掉奄,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏凤薛。R本人自食惡果不足惜姓建,卻給世界環(huán)境...
    茶點故事閱讀 39,213評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望缤苫。 院中可真熱鬧速兔,春花似錦、人聲如沸榨馁。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽翼虫。三九已至屑柔,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間珍剑,已是汗流浹背掸宛。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評論 1 260
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留招拙,地道東北人唧瘾。 一個月前我還...
    沈念sama閱讀 45,423評論 2 352
  • 正文 我出身青樓,卻偏偏與公主長得像别凤,于是被迫代替她去往敵國和親饰序。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,722評論 2 345

推薦閱讀更多精彩內(nèi)容

  • 1.描述什么是MVC 【MVC簡介】 是一種架構(gòu)模式规哪,它是蘋果非常熱衷的一種架構(gòu)模式 M:model模型保存所有應(yīng)...
    爵笙彥閱讀 2,771評論 1 33
  • *面試心聲:其實這些題本人都沒怎么背,但是在上海 兩周半 面了大約10家 收到差不多3個offer,總結(jié)起來就是把...
    Dove_iOS閱讀 27,124評論 29 470
  • 1求豫,NSObject中description屬性的意義,它可以重寫嗎?答案:每當 NSLog(@"")函數(shù)中出現(xiàn) ...
    eightzg閱讀 4,132評論 2 19
  • OC的理解與特性 OC作為一門面向?qū)ο蟮恼Z言,自然具有面向?qū)ο蟮恼Z言特性:封裝、繼承据块、多態(tài)。它既具有靜態(tài)語言的特性...
    克魯?shù)吕?/span>閱讀 445評論 0 0
  • OC的理解與特性O(shè)C作為一門面向?qū)ο蟮恼Z言剖张,自然具有面向?qū)ο蟮恼Z言特性:封裝、繼承、多態(tài)。它既具有靜態(tài)語言的特性(...
    LIANMING_LI閱讀 511評論 0 0