一 C語言方法的知識ios
1: const static voilite 修辭變量各表明什麼意思?程序員
const 修辭的變量爲常量,常量是不允許修改。sql
static 修辭的變量爲靜態變量,在內存中只被建立一次(如UItableView 中建立Cell的代理方法 用會用到靜態變量標識Cell)數據庫
Volatile定義變量爲一個共享變量 緩存
2: static 的做用安全
在類中 static 修飾的變量屬於整個類的全部,對類的全部對象共享一份服務器
在類中static 修辭的方法屬於這個類全部,該方法不能經過this來訪問 只能經過類來訪問該方法。微信
在函數體 static修辭的變量 在內存中只被分配一次,屢次調用函數體都是調用內存中的同一份。網絡
二 OC中內存方面。多線程
1 :OC 中內存管理方式
當對象調用 alloc /retain /copy 的方法時,對象的引用計數器會加1 ,當對象不在使用的時候要調用release/Autorelease將其釋放。
2 :release和Autorelease的區別。
當對象調用release的時候 對象的引用計數器減1.
當對象調用Autorelease 對象引用計數器會被系統放在最新的一個自動釋放池中,當程序執行做用域外 自動釋放池就會被釋放此時對象的引用計數會被減1.
3:readwrite readonly assign retain copy atomic nonatomic的屬性做用
readwrite readonly是設置屬性訪問級別。
assgin 是直接賦值 系統默認的
retain 該類想一直持有屬性,對象屬性計數器會加1
copy 對象的拷貝 (當屬性是NSString 是對象拷貝時淺拷貝 ,當對象時NSMutableString 對象時深拷貝)
atomic nonatomic 線程訪問 nonatomic是非原子訪問,不加同步。
4: 深拷貝和淺拷貝的區別。
淺拷貝是指針拷貝對象引用計數加1(如NSString對象調用copy是淺拷貝)
深拷貝在原有對象基礎上拷貝出一個新的對象(如NSMutableString對象調用copy是深拷貝)
5: OC中如何管理內存
有2種 第一 手動管理方式 第二 ARC 自動管理方式。
三 OC中面向對象
1: 什麼是多態
多態 子類的指針能夠指向父類,調用相同的方法 實現不一樣的功能。
2:代理的做用
代理 改變或控制傳遞鏈。允許一個類在特定的狀況下通知其餘類來完成某項功能(如應用程序啓動完成 會調用applicationDelegate類的方法來監聽應用程序的生命週期)
3:類別的做用(category)
類別主要做用能夠動態爲類擴展新的功能和方法。(如在項目中不少地方都使用文件緩存即 在NSObject中添加一個保存緩存的方法,方便公用)
4: 類別和擴展的區別。
相同點:
類別和擴展均可以動態爲類添加新的方法,
不一樣點:
類擴展能夠添加屬性,而且類擴展聲明的方法都必須實現。
類別 不能添加屬性,類別中聲明的能夠不實現。
5: Object-c 支持多繼承嗎? 有私有方法和私有變量嗎?
Object -c 不支持多繼承,能夠採用多個協議來實現多繼承。
沒有私有方法只有類方法和實例方法。
6: 擴展一個類是用繼承好仍是類別好?
通常使用類別好,不用定義子類 還能直接把類的定義放在不一樣的文件裏面(如要擴展NSString 的方法最好使用類別)
7: 何時用delegate? 何時用Notification?
delegate 針對對象一對1
Notification對一對多。
8:@Prviate @protected @public 聲明中表明什麼含義?
@prviate 私有的 只有本類中能夠訪問
@protected 受保護,只有本類和子類中能夠訪問
@public 公用 任何類均可以訪問。
四 OC中的特性:
1: id聲明的對象有什麼特性?
id 聲明的對象具備運行時的特性。聲明對象能夠指向OC中任何類型的對象。
2:對於NSString * str =[[NSDate alloc ] init ] 對象str編譯時和運行時的類型區別?
str 編譯時 是NSString 運行時 是NSDate
3: KVC和KVO的區別
KVC 鍵值編碼是一種間接訪問對象屬性的的機制,經過字符串來間接訪問屬性。
KVO 鍵值觀察模型 當對象屬性發生變化 會自動響應對象的指定方法
4: #import和#include的區別,@class表明什麼?
@class 用來聲明一個類 用來解決同文件相互包含
#import 是OC引入頭文件的關鍵字,
#include 是C語言引入頭文件的關鍵字。
#include引入頭文件可能引發重複編譯 而#import則不會引發重複編譯。
5:線程和進程的區別?
相同點:線程和進程都是操做系統運行中基本單元,系統利用該基本單元實現系統對應用的併發。
不一樣點:
進程有獨立的地址空間 一個進程崩潰 在保護模式下不會影響其餘進程。
線程是進程中執行片斷路徑,線程沒有獨立的地址空間 可是有本身的堆棧和局部變量,一個線程崩潰等於整個進程死掉。即 多進程比多線程健壯性更好,可是系統在切換進程中會浪費多資源。
6:堆和棧的區別?
管理方式:
棧上的變量 是由編譯器自動管理 不須要手動管理。
堆上的變量 是由程序員手動開闢和釋放。
7: id nil Nil的區別?
id 是聲明對象具備運行時的特性。能夠指向OC對象中的任何類型。
nil 指的對象的指針爲空。
Nil 指向空的類。
8:@import<>,@import 「」 和@class的區別
@class 用來聲明一個類 用來解決同文件相互包含
@import<> 用來導入系統頭文件
@import 「」 用來導入自定義頭文件
9: 方法和選擇器有何不一樣?
selector(方法) 表示方法名稱
method 是一個組合體 表示方法名稱和實現。
10 :你對@property 和@interface 的理解
@interface 用來聲明一個類。
@property 用來聲明2個方法 編譯器會自動生成 get set方法。
11: OC 語言的優缺點
優勢:
1:category
2: C C++ OC 混編。
3: 動態識別
缺點:
1:不支持運算符重載
2:不支持多繼承。
五: IOS 生命週期
1:ViewController 的 loadView, viewDidLoad, viewDidUnload 分別是在何時調用的?
loadView 是當調用 self.view=nil 會調用loadView方法
viewDidLoad 是當View加載完成後調用該方法。
viewDidUnload是view的視圖控制器在window上銷燬後調用。
2: 應用程序被打開有幾種方法
1: 正常打開
2:本地通知打開程序
3:被另外一程序調用打開(程序能夠開啓微信)
六 IOS中UI部分
1:Frame 和Bounds的區別?
Frame 是子View的座標相對於View的位置。
Bounds 是本身的座標系(其中X =0 Y=0)
2: UIView和CALayer的區別?
UIView是ios基本界面基礎 全部界面元素都基礎UIView上,在UIView內部上繪圖部分是由圖層來完成。
3: 事件處理過程
當用戶觸摸在一個View的點時 看點是否存在subview 和subview的subview上。
若是同時都存在 事件處理有當前View處理。
若是不是同時存在subview的subview上 觸摸點由由最近的一個Subview來處理。
4; 事件處理終止條件
alphe <0.01
userInteractionEnabled=NO
Hidden ==yes
5: UIView的生命週期是什麼樣的?順序是怎麼樣的。
建立View和呈現View
init -- loadView --ViewdIdLoad --ViewwillAppear-- viewDidAppear
View的消失和銷燬
viewWillDisappear--viewDidDisappear--ViewUnload--dealloc
6:UIViewController在何時回加載View.
當調用self.view =nil的時候 會調用loadView去從新加載View.
7: UITableView中代理方法執行的流程是什麼樣的?
第一步: 獲得section -- numberofSectionTableView
第二步: 獲得Row -- numberofRowTableView
第三步: 建立Cell -——方法忘記了。
8: UITaleView中怎樣實現重複使用Cell.
1: UITableView對象 先衝緩存中取出Cell
2: 取出Cell 若是爲nil 就重現建立
3: 取出的Cell若是不爲nil 就是從新賦值。
9:如何設計一個可變高度的Cell?
1:獲得內容 經過內容算出內容所佔的高度
2:在UITableView中設置Cell代理方法中 把算出來的高度賦值便可。
10: 談談UITableView中使用MVC模式。
MVC模式
M 表明數據模型 主要提供數據源。
V 表明視圖模型 主要用來展現界面。
C 表明控制器 主要是數據模型和視圖模型的橋樑。
七 :IOS的數據存儲
1:ios存儲數據源有哪些方式。
文件存儲(文件緩存),
plist ,
NSUserDefault(用來存儲密碼)
sqlit(商品信息)
3: 數據庫優化經驗
1:批量操做要在一個數據庫鏈接中完成
2: 多個操做要開啓事物
3:查詢要開啓分頁查詢。
八:IOS中網絡和線程
1:網絡請求的安全性處理。
答:通常請求中都用的是Post的請求,Post請求的參數都通過 Base64編碼。
2:ios中經常使用線程
隊列(operationQueue) 建立一個任務 把任務加入到任務隊裏就開啓了一個異步線程。
GCD 操做
3:什麼是TCP三次握手
第一次握手: 客戶端向服務器發送請求 等待服務確認
第二次握手: 服務處理客戶端的請求。
第三次握手: 服務器把處理好的請求響應給客戶端。
4:Socket創建網絡鏈接步驟
1:客戶端請求: 客戶端經過套接字向指定IP 端口 協議發出請求。
2:服務端監聽:服務端套接字實時監控網絡請求 等待客戶端的請求。
3:鏈接確認:當服務端監聽到客戶端發送過來套接字 而且處理響應給客戶端。
九 :IOS其餘操做
1:ios消息推送機制
答: ①:應用程序 把 要發送的消息 和 iphone的標識打包 發送給 蘋果推送服務器
②:蘋果服務器 逐一查找打包好的iphone標識 而且發送消息
③:iphone把發送消息傳遞給相應的程序 彈出push的通知
十: ios 開發中遇到的問題
1:連續屢次點擊導航按鈕,會重複建立多個控制器?
解決方案: 在點擊按鈕中加一個bool值判斷,若是一次點擊 直接建立VC,第二點擊就不執行建立VC