ios面試總結-

一 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

相關文章
相關標籤/搜索