ios面試總結-


一 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

    


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM