我的筆試題

1、OC語言的基本特點 優缺點

objc優點:

1) Cateogies

2) Posing

3) 動態識別(多態用到才去識別)

4) 指標計算

5)彈性訊息傳遞

6) 不是一個過度復雜的 C 衍生語言

7) Objective-C 與 C++ 可混合編程

缺點:

1) 不支援命名空間

2) 不支持運算符重載

3)不支持多重繼承

4)使用動態運行時類型,所有的方法都是函數調用,所以很多編譯時優化方法都用不到。(如內聯函數等),性能低。

2、#import與@class的區別

import會包含這個類的所有信息,包括實體變量和方法,而@class只是告訴編譯器。其后面聲明的名稱是類的名稱,至于這些類是如何定義的,暫時不用考慮,后面會再告訴你。

3、簡述類目優點和缺點,如果覆蓋本類或者父類的方法,會出現什么問題

優點:不需要通過增加子類而增加現有類的方法,且類目中的方法與原始類方法基本沒有區別

缺點:無法向類目中添加實例變量

出現的問題:覆蓋后原始類的方法沒辦法調用 注意這里不是方法重寫

4、簡述內存管理的基本原則

MRC黃金法則:當你使用alloc、copy(mutableCopy)或者retain一個對象時。你必須使用相應的release或者autorelease將其釋放

ARC自動管理:自動引用計數

5、什么是ARC技術?什么是GC?他們有什么區別

ARC我們稱之為自動引用計數,本質還是MRC只是在我們編寫代碼的時候不需要去手動釋放內存編譯器會自動管理內存

GC既內存垃圾回收機制 Mac10.8之后不再支持GC(移動端不存在GC)

從iOS和Android的內存使用情況來看ARC明顯好于GC

6、深,淺復制的基本概念以及他們的區別

淺復制:只復制對象本身(指針地址),不對里面的屬性復制

深復制:不僅復制對象本身,(指針指向的地址),對象持有的屬性對象也做復制;

7、內存中的堆取和棧區的差別

棧區(stack)由編譯器自動分配釋放,存放方法(函數)的參數值,局部變量的值等

堆取(heap)一般由程序員分配與釋放,如程序員不釋放,則內存溢出

靜態存儲區:內存在程序編譯的時候就已經分配好,這塊內存在程序的整個運行期間都存在。它主要存放靜態數據、全局數據和常量。

棧區:在執行函數時,函數內局部變量的存儲單元都可以在棧上創建,函數執行結束時這些存儲單元自動被釋放。棧內存分配運算內置于處理器的指令集中,效率很高,但是分配的內存容量有限。

堆區:亦稱動態內存分配。程序在運行的時候用malloc或new申請任意大小的內存,程序員自己負責在適當的時候用free或delete釋放內存。動態內存的生存期可以由我們決定,如果我們不釋放內存,程序將在最后才釋放掉動態內存。 但是,良好的編程習慣是:如果某動態內存不再使用,需要將其釋放掉,否則,我們認為發生了內存泄漏現象。

8、用戶自定義了一個對象,如何實現拷貝(可變和不可變拷貝)

必須實現copying和mtableCopying協議,表示返回一個不可變和可變的對象。否則,程序會出現異常

- (id)copyWithZone:(NSZone *)zone{? ? Person *person=[[selfClass] allocWithZone:zone];? ? person->age=self.age;? ? person->name=self.name;returnperson;}- (id)mutableCopyWithZone:(NSZone *)zone{? ? Person *person=[[selfClass] allocWithZone:zone];? ? person->age=self.age;? ? person->name=self.name;returnperson;}

1

2

3

4

5

6

7

8

9

10

11

12

13

14

9、strong與weak _unsafe_unretained與weak的區別

strong與weak:strong強引用,weak弱引用,在ARC中,使用strong告訴編譯器幫助我們自動插入reatin,weak是普通賦值相當于手動管理內存中的assign

_unsafe_unretained與weak:他們的功能一致,區別在于當指向對象銷毀后,weak會將變量直為nil,防止調用野指針

10、ARC中存在內存泄漏嗎?舉個例子

存在 當兩個強引用(strong)同時指向一塊內存的時候將釋放不掉

Person * p = [[Person alloc] init];NSMutableArray* arr = [[NSMutableArrayalloc] init];[arr addObject:p];

1

2

3

把對象從集合中移除的時候,也會釋放掉這個對象的強指針

[arr removeObject:p];

或者[arr removeAllObjects];

而接下來才是重點不進行下面的兩步p內存將不會被釋放

arr = nil;//如果不進行賦值為nil的操作,一樣存在內存溢出的現象,賦值為nil系統會對其進行清空所有強指針的操作.

p = nil;

11、自動釋放池是什么,如何工作

自動釋放池是NSAutorelease類的一個實例,當向一個對象發送autorelease消息時,該對象會自動會自動入池,待銷毀時,將會向池中所有對象發送一條release消息,釋放對象

12、為什么delegate屬性都是assign而不是strong的?

防止循環引用,當簽署代理的時候如果使用strong就會造成相互持有,以至于對象無法釋放

13、iOS開發中數據持久化有幾種?

plist文件、對象歸檔、sqlite3數據庫、coredata、NSUserDefault

14、什么是KVC和KVO?他們之間的關系是什么?

KVC:鍵值編碼是一種間接訪問對象實例變量的機制,該機制不通過存取方法就可以訪問對象的實例變量

KVO:鍵值觀察是一種能使得對象獲取到其他對象屬性變化的通知機制。

關系:實現KVO模式被觀察的獨享必須使用KVC簡直編碼來修改它的實例變量,這樣才能被觀察者觀察到。因此KVC是KVO的基礎或者說KVO的實現是建立在KVC的基礎之上的。

15、簡述常見的設計模式

單例、代理、通知、工廠、策略

16、內存管理在dealloc方法中,用release方法好還是用=nil好?

使用=nil方法更好,因為先調用了release方法,而且將變量置為nil,這樣就更安全的釋放對象,防止野指針調用

17、線程與進程的區別和聯系

一般應用程序是單個進程,多個進程需要多個CPU,進程是靜態的容器,里面容納多個線程,線程是一些列方法的現行執行路徑。

18、delegate、Notification、block的使用區別

delegate與block一般用于兩個對象一對一之間的通信交互,delegate需要定義協議方法,代理對象實現協議方法,并且需要建立代理關系才可以實現通信,代理的好處是代碼的可讀性比較高,如果通信事件比較多的話,建議使用delegate。

block更加簡潔,不需要定義繁瑣的協議方法,而且由于block的機制我們可以直接使用局部變量

Notification主要用于一對多情況下通信,而且通信對象之間不需要建立關系。但是使用通知的代碼可讀性較差。

19、事件響應者鏈的概念

響應者鏈表示一個系列的響應者對象。事件被交由第一響應者對象處理,如果第一響應者不處理,事件被沿著響應者鏈向上傳遞,交給下一個響應者。一般來說,第一響應者是視圖對象或者子類對象,當其被觸摸后事件被交由它處理,如果它不處理,事件就會被傳遞給它的父視圖對象(如果存在),然后是它的視圖控制器(如果存在),以此類推,直到頂層視圖。接下來會沿著頂層視圖到窗口。再到程序。如果整個過程都沒有響應這個事件,該事件就會被丟棄。一般情況下在響應者鏈中只要由對象處理事件,事件就停止傳遞。但我們可以控制是否繼續傳遞。

20、C語言中static變量和static函數有什么作用

static變量:表示變量是靜態存儲變量,表示變量存放在靜態存儲區

static函數:表示只在本文件中有效,別的文件中不能應用該函數

21、指針

inta;//一個數值int*a;//一個指向數值的指針int**a;//一個指向指針的指針inta[10];//一個有10個指針的數組,該指針指向一個整型數組int*a[10];//一個有10個指針的數組,該指針指向一個整型數組int(*a)[10];//一個指向有10整型數的數組的指針int(*a)(int);//一個指向函數的指針,該函數有一個整型參數并返回一個整形數int(*a[10])(int);//一個有10個指針的數組,該指針指向一個函數,該函數有一個整型參數并返回一個整型值

1

2

3

4

5

6

7

8

9

22、c和objc以及c++和objc如何混用,

實現文件的擴展名.m改成.mm即可。但cpp文件只能用c/c++代碼,而且cpp文件include的頭文件中,也不能出現oc的代碼,因為cpp只能寫c++的代碼

23、OC中有私有方法,私有變量嗎?

使用private修飾的全局變量是私有的變量

OC在語法上沒有私有方法,不過可以通過延展在實現文件里定義方法作為私有方法,但是 不是真正意義上的私有方法,也是可以調用的,只是外部不可見

24、const的使用

const int a; a是一個常整型數

const int *a;a是一個指向常整型數的指針(也就是,整型數是不可修改的,但指針可以)

int *const a;a是一個指向整型數的常指針(也就是說,指針指向的整型數是可以修改的,但是指針是不可修改的)

25、C語言中extern的作用,extern c的作用

extern可以置于變量或者函數前,以表示變量或者函數定義在別的文件中,提示編譯器遇到此變量和函數時在其他模塊中尋找其定義

C++語言在編譯的時候為了解決函數的多態問題,會將函數名和參數聯合起來生成一個中間的函數名稱,而C語言不會,這告訴編譯器,請保持我的名稱,不要給我生成用于連接的中間函數名

26、什么是多態

不同對象以自己的方式響應相同的消息的能力叫做多態

聲明的一個變量,在運行的時候綁定不同的對象,比如在方法的參數中聲明一個變量UIView *view,運行的時候我們可以根據不同的應用場景給view變量傳入不同的對象,可以傳一個UIButton,也可以傳入UIImageView對象。

27、cocoa touch框架

UIKit、Foundation、CoreGraphic、CoreAnimation

音頻和視頻:Core Audio、OpenAL、Media Library、AV Foundation

數據管理:Core Data、SQLite

圖形和動畫:Core Animation OpenGL ES、Quartz 2D、Core Graphic

用戶應用:Address Book、Core Location、Map Kit、Store Kit

28、棧結構與隊列的區別

棧(Stack):是限定只能在表的一段進行插入和刪除操作的線性表。

隊列(Queue):是限定只能在表的一端進行插入和在另一端進行刪除操作的線性表。

隊列先進先出、棧先進后出;

遍歷速度不同。隊列遍歷數據快;

29、單例 為什么使用單例

+(SingleCase *)sharedManager{staticSingleCase *ManagerInstance=nil;staticdispatch_once_tpredicate;dispatch_once(&predicate, ^{? ? ? ? ? ? ? ? ? ManagerInstance = [[selfalloc] init];? ? ? ? ? });returnManagerInstance;? }

單例設計是用來限制一個類只能創建一個對象,那么此對象中的屬性可以存儲全局的共享的數據,所有的類都可以訪問、設置此單例對象中的屬性數據

如果一個類創建的時候非常耗費性能,那么此類可以設置為單例節約性能

30、你對id的理解

id可以理解為指向對象的指針。所有oc的對象 id都可以指向,編譯器不會做類型檢查,id調用任何存在的方法都不會在編譯階段報錯,當然如果這個id指向的對象沒有這個方法,該崩潰還是會崩潰的。

31、UIButton的父類是誰?UIView呢?

UIButton的父類是UIControl,UIControl的父類是UIView,UIView的父類是UIResponder,UIResponder的父類是NSObject

32、http狀態碼

http狀態嗎 :302 是請求重定向。500以上是服務器錯誤。400以上是請求鏈接錯誤或者找不到服務器。200以上是正確。100以上是請求接受成功。

33、dispatch_group_async、dispatch_barrier_async、dispatch_apply分別是什么?

dispatch_group_async 可以實現監聽一組任務是否完成,完成后得到通知執行其他的操作。這個方法很有用,比如你執行三個下載任務,當三個任務都下載完成后你才通知界面說完成的了

dispatch_barrier_async 是在前面的任務執行結束后它才執行,而且它后面的任務等它執行完成之后才會執行

dispatch_apply 執行某個代碼片段N次。

34、區分nil、Nil、NULL

nil和C語言的NULL相同,在objc/objc.h中定義。nil表示一個Objctive-C對象,這個對象的指針指向空(沒有東西就是空)。

首字母大寫的Nil和nil有一點不一樣,Nil定義一個指向空的類(是Class,而不是對象)。

35、AppDelegate扮演著什么樣的角色

AppDelegate作為UIApplication的委托,一般我們可以通過類方法[UIApplication shareApplication]來獲取對UIApplication,在UIApplication接收到系統事件和生命周期事件時,會把相應的事件傳遞給UIApplicationDelegate進行處理

36、什么是cocoa/cocoa touch

cocoa是os開發環境 cocoa touch是iPhone開發環境

37、iBeacons是什么?

iBeacons是蘋果在2013年WWDC上推出一項基于藍牙4.0(Bluetooth LE | BLE | Bluetooth Smart)的精準微定位技術,當你的手持設備靠近一個Beacon基站時,設備就能夠感應到Beacon信號,范圍可以從幾毫米到50米。功耗相當小

38、iOS應用是如何實現后臺多任務處理(Multitasking)的?

ios7之后(一個app可以混合調用多種模式):Background Audio、VoIP、Location Services、Newsstand、Background Task Completion、Background Fetch 、Remote Notification、Background Transfer Service

39、Cocoa Touch包含什么?

除 UIKit 之外,Cocoa Touch 包含創建世界一流 iOS 應用程序所需的所有框架,從 3D 圖形、專業音頻到網絡,甚至提供特殊設備訪問 API 以控制攝像機或從 GPS 硬件獲取位置。Cocoa Touch 既包含只需要幾行代碼就可以完成全部任務的強大的 Objective-C 框架,也在需要時提供基礎的 C 語言 API 來直接訪問系統。這些框架示例包括:

Core Animation

通過 Core Animation,您就可以通過基于組合獨立圖層的簡單編程模型來創建豐富的用戶體驗。

Core Audio

Core Audio 是播放、處理和錄制音頻的專業級技術,能夠輕松為您的應用程序添加強大的音頻功能。

Core Data

Core Data 提供面向對象的數據管理解決方案,該方案易于使用和理解,甚至可處理任何應用或大或小的數據模型。

筆試

1、CALaye和UIView的區別是什么?

最大的區別是:UIview可以響應點擊事件CALayer不可以

圖層不會直接渲染到屏幕上,UIView是iOS系統中界面元素的基礎,所有的界面元素都是繼承自它。它本身完全由CoreAnimation來實現。他真正的繪圖部分,是由一個CALayer來管理。UIView本身更像一個CALayer的管理器。一個UIView可以有n個CALayer,每個layer顯示一種東西,增強UIView的展現能力

2、什么是GCD

GCD是Apple開發的一個多核編程的較新的解決方法。在Mac OS X10.6中首次推出。GCD是一個替代諸如NSThread等技術很高效和強大的技術。GCD完全可以處理諸如數據鎖定和資源泄漏等復雜的異步編程問題。

3、TCP/UDP區別聯系

TCP:傳輸控制協議,提供的是面向連接、可靠的字節流服務。當客戶和服務器彼此交換數據前,必須先在雙方之間建立一個TCP連接,之后才能傳輸數據。TCP提供超時重發,丟棄重復數據,檢驗數據,流量控制等功能,保證數據能從一端傳到另一端。 (MSN)

UDP:用戶數據報協議,是一個簡單的面向數據報的運輸層協議。UDP不提供可靠性,它只是把應用程序傳給IP層的數據報發送出去,但是并不能保證它們能到達目的地。由于UDP在傳輸數據報前不用在客戶和服務器之間建立一個連接,且沒有超時重發等機制,故而傳輸速度很快 (QQ)

4、socket連接和http連接的區別

簡單說,你瀏覽的網頁(網址以http://開頭)都是http協議傳輸到你的瀏覽器的, 而http是基于socket之上的。socket是一套完成tcp,udp協議的接口。

HTTP協議:簡單對象訪問協議,對應于應用層 ,HTTP協議是基于TCP連接的

tcp協議: 對應于傳輸層

ip協議: 對應于網絡層

TCP/IP是傳輸層協議,主要解決數據如何在網絡中傳輸;而HTTP是應用層協議,主要解決如何包裝數據。

Socket是對TCP/IP協議的封裝,Socket本身并不是協議,而是一個調用接口(API),通過Socket,我們才能使用TCP/IP協議。

**http連接:http連接就是所謂的短連接,即客戶端向服務器端發送一次請求,服務器端響應后連接即會斷掉;

socket連接:socket連接就是所謂的長連接,理論上客戶端和服務器端一旦建立起連接將不會主動斷掉;但是由于各種環境因素可能會是連接斷開,比如說:服務器端或客戶端主機down了,網絡故障,或者兩者之間長時間沒有數據傳輸,網絡防火墻可能會斷開該連接以釋放網絡資源**

Socket是一個針對TCP和UDP編程的接口,你可以借助它建立TCP連接等等。而TCP和UDP協議屬于傳輸層 。

而http是個應用層的協議,它實際上也建立在TCP協議之上。

(HTTP是轎車,提供了封裝或者顯示數據的具體形式;Socket是發動機,提供了網絡通信的能力。)

Socket是對TCP/IP協議的封裝,Socket本身并不是協議,而是一個調用接口(API),通過Socket,我們才能使用TCP/IP協議。Socket的出現只是使得程序員更方便地使用TCP/IP協議棧而已,是對TCP/IP協議的抽象,從而形成了我們知道的一些最基本的函數接口。

5、什么是TCP連接的三次握手

第一次握手:客戶端發送syn包到服務器,并計入SYN_SEND狀態,等待服務器的確認;

第二次握手:服務器收到syn包,必須確認客戶的SYN,同時自己也發送一個syn包,即SYN+ACK包,此時服務器進入SYN_RECY狀態;

第三次握手:客戶端收到服務器的SYN+ACK包,向服務器發送確認包ACK,此包發送完畢,客戶端和服務器進入ESTABLISHED狀態,完成三次握手

6、frame與bounds的區別

Frame指的是:該view在父view坐標系統中的位置和大小(參照點是父視圖的坐標系統)

Bounds指的是:該view在本身坐標系統中的位置和大小(參照點是本身的坐標系統)

7、如何理解MVC設計模式

MVC是一種架構設計,M數據模型model,V視圖View,C控制器controller

model:負責存儲定義操作數據

view:用來展示數據給用戶,和用戶進行操作交互

controller:是model與view的協調者,控制器獲取數據,將數據交給視圖展示

8、控制器的loadView方法是什么時候調用的,viewWillAperar什么時候調用

loadView:當控制器的根視圖View為空,且此view被訪問時調用

viewWillApear:當控制器根視圖view被添加到父視圖上時調用

9、控制器的xib是怎么加載的

當UIViewController的loadView被調用時,在此方法中,通過NSBundle加載Xib,先通過控制器的類名作為xib文件加載此xib文件。如果找到此xib文件,則加載為view對象作為控制器的根視圖,如果沒有xib文件,則通過alloc創建一個view對象作為根視圖

10、內存不足,系統發出警告,此時控制器應該如何處理

內存不足時。系統會調用控制器的didReceiveMemoryWarning方法通知控制器內存不足

當didReceiveMemoryWarning方法被調用的時候我們調用 self.view=nil方法釋放子視圖

11、如何監聽View的觸摸事件、事件是如何傳遞的、視圖的響應者鏈是什么?

監聽觸摸事件:覆寫view的touchBegain、touchMove、touchEnd系列方法監聽視圖的觸摸

事件的傳遞:當觸摸一個視圖時,首先系統會捕捉此事件,并為此事件創見一個UIEvent對象,將此對象加入到當前應用程序的時間隊列中。然后由UIWindow對象分發個觸摸的視圖對象,也就是第一響應者對象。

響應者鏈表示一個系列的響應者對象。事件被交由第一響應者對象處理,如果第一響應者不處理,事件被沿著響應者鏈向上傳遞,交給下一個響應者。一般來說,第一響應者是視圖對象或者子類對象,當其被觸摸后事件被交由它處理,如果它不處理,事件就會被傳遞給它的父視圖對象(如果存在),然后是它的視圖控制器(如果存在),以此類推,直到頂層視圖。接下來會沿著頂層視圖到窗口。再到程序。如果整個過程都沒有響應這個事件,該事件就會被丟棄。一般情況下在響應者鏈中只要由對象處理事件,事件就停止傳遞。但我們可以控制是否繼續傳遞。

12、block在內存管理上的特點、如何解決循環引用

特點:block中使用了局部對象,則此對象將會被retain,引用了當前對象的屬性或者方法,則會將當前對象retain

解決循環引用:將當前對象賦給一個局部變量,并且使用__block關鍵字修飾該局部變量,使用該變量訪問當前對象 的屬性和方法(__block typeof(self)weakself=self)

13、timer的間隔周期準嗎?為什么?怎樣實現一個精準的timer?

定時器timer一般都是準確的、但是當主線程有些時候出現阻塞(UI都是在主線程運行 加載視圖就會阻塞)的情況,這樣就可能導致timer會延遲。我們可以開辟子線程運行定時器

14、Http協議的特點,GET請求與POST請求的區別,什么事HTTPS協議

特點:短連接當服務端接收到請求并處理請求后關閉連接

區別:GET請求沒有請求體,POST含有請求體,請求參數可以放入請求體重所以POST可以提交大量的數據個服務器

HTTPS:安全超文本傳輸協議他是一個安全通信通道,它基于HTTP開發,用于客戶計算機和服務器之間交換信息。它使用安全套接字層(SSL)進行信息交換,簡單來說他是HTTP的安全版

15、xml數據解析方式,各有什么不同,json解析有哪些框架

解析方式:DOM解析與SAX解析

異同:DOM解析必須先完成DOM樹的構造,在處理較大的XML文檔時比較耗內存,占用資源較多SAX解析XML文檔時每遇到一個開始或者結束標簽或者屬性、或者一條指令時,程序就產生一個事件進行相應的處理,因此SAX對于DOM來說更適合操作大的XML文檔

iOS原生json解析框架:NSJSONSerialization

16、用過哪些開源網絡框架、各有什么特點

ASIHTTPRequest

優點:出來比較早、功能強大、文檔豐富

缺點:停止更新、新特性少、厚重

AFNetWorking

優點:支持比較新的特性、簡單易用

缺點:文檔數目一般、功能少、沒有同步請求

MKNetworkKit

優點:支持ARC、有ASIHTTPRequest的功能,AFNetWorking的輕便

缺點:有一些小bug

17、iOS中有哪些數據持久化的方式,各有什么特點,iOS平臺怎么做數據的持久化?CoreData和sqlite有沒有必然聯系?CoreData是一個關系型數據庫嗎?

方式:屬性列表、對象歸檔、SQLite數據庫、CoreData

iOS怎么持久化:混合使用

CoreData與sqlite是有聯系的,CoreData是對sqlite的封裝,因為sqlite是c語言的api,然而有人也需要oc 的api,所以有了 CoreData另外,CoreData不僅僅是把c的api翻譯成oc 的api,還提供了一些管理的功能,使用更加方便。

18、iOS如何捕捉異常

前言:在開發APP時,我們通常都會需要捕獲異常,防止應用程序突然的崩潰,防止給予用戶不友好的體驗。其實Objective-C的異常處理方法和JAVA的雷同,懂JAVA的朋友一看就懂。

以下程序已測試并通過:

設備:iOS 8模擬器中

開發工具:XCode6.1

使用@try、catch捕獲異常:

以下是最簡單的代碼寫法,其中@finally可以去掉:

@try{// 可能會出現崩潰的代碼}@catch(NSException *exception) {// 捕獲到的異常exception}@finally{// 結果處理}

在這里舉多一具比較詳細的方法,拋出異常:

@try{// 1[selftryTwo];}@catch(NSException*exception) {// 2NSLog(@"%s\n%@", __FUNCTION__, exception);//? ? ? ? @throw exception; // 這里不能再拋異常}@finally{// 3NSLog(@"我一定會執行");}// 4// 這里一定會執行NSLog(@"try");tryTwo方法代碼:

- (void)tryTwo{@try{// 5NSString*str = @"abc";? ? ? ? [str substringFromIndex:111];// 程序到這里會崩}@catch(NSException*exception) {// 6//? ? ? ? @throw exception; // 拋出異常,即由上一級處理// 7NSLog(@"%s\n%@", __FUNCTION__, exception);? ? }@finally{// 8NSLog(@"tryTwo - 我一定會執行");? ? }// 9// 如果拋出異常,那么這段代碼則不會執行NSLog(@"如果這里拋出異常,那么這段代碼則不會執行");}

為了方便大家理解,我在這里再說明一下情況:

如果6拋出異常,那么執行順序為:1->5->6->8->3->4

如果6沒拋出異常,那么執行順序為:1->5->7->8->9->3->4

2)部分情況的崩潰我們是無法避免的,就算是QQ也會有崩潰的時候。因此我們可以在程序崩潰之前做一些“動作”(收集錯誤信息),以下例子是把捕獲到的異常發送至開發者的郵箱。

AppDelegate.m

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {// Override point for customization after application launch.NSSetUncaughtExceptionHandler(&UncaughtExceptionHandler);returnYES;}voidUncaughtExceptionHandler(NSException *exception) {/**

*? 獲取異常崩潰信息

*/NSArray *callStack = [exception callStackSymbols];? ? NSString *reason = [exception reason];? ? NSString *name = [exception name];? ? NSString *content = [NSString stringWithFormat:@"========異常錯誤報告========\nname:%@\nreason:\n%@\ncallStackSymbols:\n%@",name,reason,[callStack componentsJoinedByString:@"\n"]];/**

*? 把異常崩潰信息發送至開發者郵件

*/NSMutableString *mailUrl = [NSMutableString string];? ? [mailUrl appendString:@"mailto:test@qq.com"];? ? [mailUrl appendString:@"?subject=程序異常崩潰,請配合發送異常報告,謝謝合作!"];? ? [mailUrl appendFormat:@"&body=%@", content];// 打開地址NSString *mailPath = [mailUrl stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];? ? [[UIApplication sharedApplication] openURL:[NSURL URLWithString:mailPath]];}

19、單元測試

iOS自帶單元測試框架OCUnit,但目前最好的測試框架應該是GHUnit

20、 OC有多繼承嗎?有什么替代方案

OC沒有多繼承,可以通過實現協議替代。OC是單繼承,所有的類全都繼承于NSObject,

但是在協議的遵守上卻允許使用多繼承。所以可以用協議來實現多繼承

21、蘋果APP的上架流程、什么情況下會被打回

上架流程:

1)在蘋果網站的開發者中心,新建一個APP,填寫此APP相關的一些描述信息

2)下載安裝發布證書

3)選擇發布證書,使用Archive編譯發布包

4)使用Xcode提交發布包

被打回:

1)訪問私有API

2)APP有嚴重的BUG

3)給蘋果審核的測試賬號無法登陸,或者境外無法訪問國內服務器

4)APP加載時間過長,iOS APP的最長啟動時間不得超過15秒

5)給出外部購買鏈接

6)APP描述中帶有”Beta“字樣,或者其他表明APP還未開發完成的信息

7)APP描述中提到了iOS之外的其他支持平臺

··········

22、tableView是如何復用的

如果屏幕上能顯示10個單元格,則tableView只會創建11個單元格(n+1),當滑倒第12個單元格時就會復用第一個單元格對象。tableView中有個復用池概念,tableView調用協議方法獲取單元格時,先從復用池中查找是否有可用的單元格如果有則復用,如果沒有則創建一個單元格對象

23、如何優化tableView的滑動速度

1)復用單元格

2)使用不透明的視圖,單元格中盡量少使用動畫

3)圖片加載使用異步加載,并且設置圖片加載的并發數

4)滑動式不加載圖片,停止滑動開始加載

5)文字、圖片可以直接drawInRect繪制

6)如非必要,減少reloadData全部cell,只reloadRowsAtInexPaths

7)如果cell是動態行高,計算高度后緩存

8)cell高度固定的話直接用cell.rowHeight設置高度

24、ASI網絡框架有哪些功能

不支持ARC

25、了解Socket通信方式嗎?

Socket通信是通過TCP/IP協議,實現客戶端與服務器端之間的通信方式,客戶端通過三次握手與服務器建立可靠的連接,然后進行數據傳輸

26、runloop的理解

runloop是線程相關的基礎框架的一部分。一個runloop就是一個事件處理的循環,用來不停地調度工作以及處理傳入事件,使用runloop的目的釋然你的線程在有工作的時候忙于工作,沒有工作的時候處于休眠狀態。

27、如何調用drawRect方法與layoutSubView方法,這兩個方法的作用

通過setNeedsLayout方法異步調用layoutSubView方法

通過setNeedsDisplay方法異步調用drawRect方法

drawRect方法用于繪圖,layoutSubView方法用于布局子視圖

28、二維碼掃描用過哪些類庫,這些類庫有什么特點?

二維碼生成:QRGener

二維碼掃描:zxing(自定義掃描區域)、ZBarSDK

29、iOS5,6、7、8、9都有什么新特性

iOS5:iCloud、定制UI、storyBoard、ARC、coreimage路徑,新增JSON解析類

其他:6、7、8、9新特性

30、storyBoard的優缺點

優點:開發界面所見即所得,可以快速通過拖拽構造界面。

缺點:xib 對版本管理是災難,storyBoard是多個xib的集合一樣難以管理

31、如何打包靜態庫

新建一個Framework&Library的項目,編譯的時候,會將項目中的代碼打包成一個.a的靜態庫文件。

32、SVN、Git協作開發,怎么防止代碼文件沖突?

防止沖突:SVN不要多人同時修改同一個文件。例如A/B都修改同一個文件,先讓A修改,然后提交到服務器,然后B更新下來,在進行修改。Git服務器上的項目文件,僅讓一個人管理提交,其他人只更新。

33、斷點續傳是如何實現的?

其實斷點續傳的原理很簡單,就是在Http的請求上和一般的下載有所不同而已。 打個比方,瀏覽器請求服務器上的一個文時,所發出的請求如下: 假設服務器域名為w www.sjtu.edu.cn,文件名為down.zip。 GET /down.zip HTTP/1.1 Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms- excel, application/msword, application/vnd.ms-powerpoint,/Accept-Language: zh-cn Accept-Encoding: gzip, deflate User-Agent: Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0) Connection: Keep-Alive 服務器收到請求后,按要求尋找請求的文件,提取文件的信息,然后返回給瀏覽器,返回信息如下: 200 Content-Length=106786028 Accept-Ranges=bytes Date=Mon, 30 Apr 2001 12:56:11 GMT ETag=W/”02ca57e173c11:95b” Content-Type=application/octet-stream Server=Microsoft-IIS/5.0 Last-Modified=Mon, 30 Apr 2001 12:56:11 GMT 所謂斷點續傳,也就是要從文件已經下載的地方開始繼續下載。所以在客戶端瀏覽器傳給 Web服務器的時候要多加一條信息–從哪里開始。 下面是用自己編的一個”瀏覽器”來傳遞請求信息給Web服務器,要求從2000070字節開始。 GET /down.zip HTTP/1.0 User-Agent: NetFox RANGE: bytes=2000070- Accept: text/html, image/gif, image/jpeg,; q=.2,/*; q=.2 仔細看一下就會發現多了一行RANGE: bytes=2000070- 這一行的意思就是告訴服務器down.zip這個文件從2000070字節開始傳,前面的字節不用傳了。 服務器收到這個請求以后,返回的信息如下: 206 Content-Length=106786028 Content-Range=bytes 2000070-106786027/106786028 Date=Mon, 30 Apr 2001 12:55:20 GMT ETag=W/”02ca57e173c11:95b” Content-Type=application/octet-stream Server=Microsoft-IIS/5.0 Last-Modified=Mon, 30 Apr 2001 12:55:20 GMT 和前面服務器返回的信息比較一下,就會發現增加了一行: Content-Range=bytes 2000070-106786027/106786028 返回的代碼也改為206了,而不再是200了。 知道了以上原理,就可以進行斷點續傳的編程了。

34、使用GCD加載一個網絡圖片

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0), ^{NSURL* url = [NSURLURLWithString:@"http://avatar.csdn.net/2/C/D/1_totogo2010.jpg"];? ? ? NSData * data = [[NSData alloc]initWithContentsOfURL:url];UIImage*image = [[UIImagealloc]initWithData:data];if(data !=nil) {dispatch_async(dispatch_get_main_queue(), ^{self.imageView.image= image;//當操作UI的時候回到主線程});? ? ? }? });

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,836評論 6 540
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,275評論 3 428
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,904評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,633評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,368評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,736評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,740評論 3 446
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,919評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,481評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,235評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,427評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,968評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,656評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,055評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,348評論 1 294
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,160評論 3 398
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,380評論 2 379

推薦閱讀更多精彩內容

  • 從三月份找實習到現在,面了一些公司,掛了不少,但最終還是拿到小米、百度、阿里、京東、新浪、CVTE、樂視家的研發崗...
    時芥藍閱讀 42,330評論 11 349
  • *面試心聲:其實這些題本人都沒怎么背,但是在上海 兩周半 面了大約10家 收到差不多3個offer,總結起來就是把...
    Dove_iOS閱讀 27,197評論 30 471
  • __block和__weak修飾符的區別其實是挺明顯的:1.__block不管是ARC還是MRC模式下都可以使用,...
    LZM輪回閱讀 3,352評論 0 6
  • 多線程、特別是NSOperation 和 GCD 的內部原理。運行時機制的原理和運用場景。SDWebImage的原...
    LZM輪回閱讀 2,025評論 0 12
  • socket(套接字)是通信的基石,是支持TCP/IP協議的網絡通信的基本操作單元,包含進行網絡通信必須的五種信息...
    春鵬閱讀 278評論 0 0