一 C語言方法的知識
1: const static voilite 修辭變量各代表什么意思?
const 修辭的變量為常量,常量是不容許修改。
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
