国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - IOS - 深入講解iOS開發中的UIViewController

深入講解iOS開發中的UIViewController

2020-12-24 15:23iOS開發網 IOS

這篇文章主要介紹了iOS開發中的UIViewController,其中以UIViewController作為著重講解,需要的朋友可以參考下

uiviewcontroller顧名思義:視圖控制器。應該在mvc設計模式中扮演控制層的角色。一些初學者在最開始的時候一直不理解為何有了uiview還要uiviewcontroller做什么用,不都是向視圖中增加view。在此我要聲明一下
uiviewcontroller和uiview是兩個不同的類uiviewcontroller是視圖控制器 而uiview是視圖也就是說,uiviewcontroller是控制uiview的。你也可以認為uiviewcontroller就是一個相框,而uiview就是一個相片,相框可以隨時隨地的拿走這個相片而換另外一張相片,或者在這張相片上加一個新的相片。而相片卻不能操縱相框的。 uiview工作在第一線,向用戶展示表現的內容,并接受用戶的交互。uiviewcontroller相當于導演,按照計劃編排屬下的uiview以何種形式展現,其中包含一些花哨的技巧,如翻轉、淡入淡出等。 uivewcontroller的另一個功能是處理用戶交互操作,注意這里我說的是”處理”,當然uiviewcontroller本身是不知道用戶交互的,這就需要uiview將用戶的交互操作(例如:touchesbegintouchesmoved)傳遞上來。一般常用的兩種方法完成這種傳遞: 1、[self nextresponder] touchesbegin:touches… 2、使用notification 不管以何種方式,如果uiviewcontroller得到了用戶的輸入,那么它應該對uiview做些改變以響應用戶的輸入,這里要注意uiviewcontroller應該只改變uiview的表現,而不應該處理其它事情,更多的操作通過delegate來進行,關于delegate的應用場合下次講解消息的傳遞方式中一起闡述。請大家記住:uiview是一個視圖,uiviewcontroller是一個控制器,每一個viewcontroller管理著一個view。
如果你開發的應用界面非常的簡單,確實沒有必要用控制器控制視圖,但是對于視圖中復雜的數據顯示和數據處理,如果沒有這個控制器,這樣會使得代碼的繼承深度大大增加,不利于代碼的閱讀,首先看下官方api對uiviewcontroller的解釋:the uiviewcontroller class provides the fundamental view-management model for iphone applications(視圖控制器為iphone的應用程序提供了基礎的視圖管理模型) you use each instance of uiviewcontroller to manage a view hierarchy(你可以使用視圖控制器管理視圖的繼承)。從這里就可以看出,如果使用了視圖控制器,你就可以方便的管理視圖中的子視圖,假如沒有了這個控制器,可想而知每個視圖豈不是都要用繼承才能管理彼此的關系。
uiviewcontroller的基礎功能是管理界面中的view,但是一個復雜的應用程序肯定有好多的視圖控制器,那么自然如果視圖控制要有管理自己的功能就更加強大。先看api文檔:view controllers rarely operate in isolation.if your application uses a navigation or tab bar controller,or if your application presents views modally,then it typically has several view controllers interacting with each other to implement those navigation features(視圖控制器很少單獨使用。假如你的應用程序要使用導航或者轉換條控制器,或許是你的應用程序要呈現模態的視圖,明顯的這里有很多的視圖控制器相互關聯來實現導航的功能)。所以可以看出,uinavigationcontroller和uitabbarcontroller是用來控制視圖控制器的使用的,同樣他們的跟視圖也是uiviewcontroller,這里就說明了uiviewcontroller是自己可以控制自己的。這也是為何我們使用uinavigationcontroller的時候不允許在把一個navigationcontroller推入堆棧中,這樣極容易形成自己隊遞歸調用自己,造成堆棧溢出。以下是使用uiviewcontroller應該注意的地方。
1.首先看loadview和viewdidload的區別,兩者都是用來初始化試圖控制器中的視圖如何顯示的。還是先看官方api解釋:if you create your views manually, you must override this method and use it to create your views.if you use interface builder to create your views and initialize the view controller that is,you initialize the view using the initwithnibname:bundle: method,set the nibname and nibbundle properties directly, or create both your views and view controller in interface builder—then you must not override this method.(如果你手動創建一個視圖控制器,你必須重載這個方法,去使用他創建你的視圖。如果你使用interface builder創建和初始化的視圖控制器,你就不必重載此方法)。所以當你手動創建一個視圖控制器的時候一定要注意重載loadview,否則你的視圖將不回顯示你增加的任何字視圖。
2.viewdidunload這個方法最容易誤導人,先看api解釋:called when the controller's view is released from memory(當控制器的視圖從內存中釋放的時候被調用),個人覺得官方的解釋對英語非母語的國家的人來說,很容易理解為視圖控制器release的時候,調用此方法。但是如果實際調試以下,視圖控制器釋放的時候不會調用該方法。再進一步分析api文檔:this method is called as a counterpart to the viewdidload method.
it is called during low memory conditions when the view controller needs to release its view
and any objects associated with that view to free up memory(這個方法是被調用相對于viewdidload方法的,在內存警告的情況下,當試圖控制器需要釋放它的視圖和這個視圖中相關聯的任何對象來釋放內存的時候,調用此方法)。這里還有一點要注意的時,當出現內存警告的時候,是調用正在顯示的視圖控制器的父視圖控制器的viewdidunload方法,而不是正在顯示的視圖控制器的viewdidunload方法。因為如果調用了正在顯示的視圖控制器的viewdidunload方法,那么用戶正在看的界面就會消失,雖然釋放了內存但是用戶顯然沒法接受,自然要釋放該視圖下面看不到的視圖控制器中的視圖。被釋放的視圖,下次加載的時候再調用viewdidload的方法,所以viewdidunload的方法是和viewdidload方法相互對應的。

uiviewcontroller生命周期
uiviewcontrol是ios程序中的一個重要組成部分,扮演者一個大管家的身份,管理著程序中的眾多視圖,今天看看了官方文檔并做了如下一些簡單的記錄:
 
何時加載view,加載的原則是什么,視圖何時消失等問題,文檔中講的都很詳細。
 
  controller的view最好在需要顯示時再去加載,并且在系統發出內存警告時釋放比必要的view及相關的數據對象。
 
一、uiviewcontroller的初始化
 
  初始化時會根據需要調用init,initwithcoder等相關函數,這個時候我們可以做一下簡單的初始化操作,建立viewcontroller中需要使用的數據模型等,不建議在初始化階段就直接創建view及其他與顯示有關的對象(應該放到loadview的時候去創建,或者采用懶加載的方法創建)。
 
  我們都知道viewcontroller可以通過代碼和xib兩種方式創建,這兩種方式的初始化流程也不盡相同。
 
  1)使用xib創建的vc
 
  xib其實最終是會把我們的設置保存成一個數據集,當需要初始化構建vc的時候,回去讀取記錄的數據集,然后幫我們動態的創建vc,因此可以想象它在初始化時會先去找看是否實現initwithcoder方法,如果該類實現了該方法,就直接調用initwithcoder方法創建對象,如果沒有實現的話就調用init方法。調用完初始化方法以后緊接著會調用awakefromnib方法,在這個方法里面我們可以做進一步的初始化操作。
 
  2)使用代碼創建vc
 
  使用代碼創建時,我們根據需要手動的創建vc中的數據,如果自己定制vc時,還需要在init中調用[super init]。
 
二、uiviewcontroller中view的load和unload
 
  前面講了不建議在vc初始化的時候就創建view及其他與顯示相關的代碼,官方文檔建議將view的初始化操作放到loadview的時候再做,當vc接到內存告警時會調用didrecievememorywarning這個時候我們就要做出響應,釋放暫時不需要的對象。如果無視這個警告,系統內存不夠用時會會繼續發送,如果還得不到處理就會強制退出程序。下面看具體的loadview和unloadview時候都會做什么操作。
 
  1)load周期
深入講解iOS開發中的UIViewController
當需要顯示或者訪問view屬性時,view沒有創建的話,vc就會調用loadview方法,在這個時候會創建一個view并將其賦給vc.view屬性。緊接著就會調用vc的viewdidload方法,這個時候vc.view保證是有值的,可以做進一步的初始化操作,例如添加一些subview。注意:定制vc時,如果覆蓋loadview方法,不需要調用[super loadview]方法。
 
  2)unload周期
深入講解iOS開發中的UIViewController
當app收到內存警告的時候,會調用每一個vc的didrecievememorywarning方法,我們需要做出響應,釋放程序中暫時不需要的資源。通常都會重寫該方法,重寫時候需要調用super的該方法。如果檢測到當前vc的view可以被安全釋放的話,就會調用viewwillunload方法,這個我們必須要重視,因為當vc的view消失時候它的subviews可能會被一起釋放,我們需要根據具體情況做一些記錄,以保證下次能夠正確創建,同時不出現內存泄漏。調用viewwillunload以后,會將vc.view屬性設置成nil,然后在調用viewdidunload方法,這個時候我們可以釋放那些強引用的對象。

延伸 · 閱讀

精彩推薦
  • IOS詳解iOS中多個網絡請求的同步問題總結

    詳解iOS中多個網絡請求的同步問題總結

    這篇文章主要介紹了詳解iOS中多個網絡請求的同步問題總結,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧...

    liang199111302021-03-15
  • IOSiOS中UILabel實現長按復制功能實例代碼

    iOS中UILabel實現長按復制功能實例代碼

    在iOS開發過程中,有時候會用到UILabel展示的內容,那么就設計到點擊UILabel復制它上面展示的內容的功能,也就是Label長按復制功能,下面這篇文章主要給大...

    devilx12792021-04-02
  • IOSiOS開發技巧之狀態欄字體顏色的設置方法

    iOS開發技巧之狀態欄字體顏色的設置方法

    有時候我們需要根據不同的背景修改狀態欄字體的顏色,下面這篇文章主要給大家介紹了關于iOS開發技巧之狀態欄字體顏色的設置方法,文中通過示例代碼...

    夢想家-mxj8922021-05-10
  • IOSiOS中MD5加密算法的介紹和使用

    iOS中MD5加密算法的介紹和使用

    MD5加密是最常用的加密方法之一,是從一段字符串中通過相應特征生成一段32位的數字字母混合碼。對輸入信息生成唯一的128位散列值(32個字符)。這篇文...

    LYSNote5432021-02-04
  • IOSiOS實現控制屏幕常亮不變暗的方法示例

    iOS實現控制屏幕常亮不變暗的方法示例

    最近在工作中遇到了要將iOS屏幕保持常亮的需求,所以下面這篇文章主要給大家介紹了關于利用iOS如何實現控制屏幕常亮不變暗的方法,文中給出了詳細的...

    隨風13332021-04-02
  • IOSiOS中滑動控制屏幕亮度和系統音量(附加AVAudioPlayer基本用法和Masonry簡單使用)

    iOS中滑動控制屏幕亮度和系統音量(附加AVAudioPlayer基本用法和

    這篇文章主要介紹了iOS中滑動控制屏幕亮度和系統音量(附加AVAudioPlayer基本用法和Masonry簡單使用)的相關資料,需要的朋友可以參考下...

    CodingFire13652021-02-26
  • IOSiOS開發之視圖切換

    iOS開發之視圖切換

    在iOS開發中視圖的切換是很頻繁的,獨立的視圖應用在實際開發過程中并不常見,除非你的應用足夠簡單。在iOS開發中常用的視圖切換有三種,今天我們將...

    執著丶執念5272021-01-16
  • IOSiOS自定義UICollectionViewFlowLayout實現圖片瀏覽效果

    iOS自定義UICollectionViewFlowLayout實現圖片瀏覽效果

    這篇文章主要介紹了iOS自定義UICollectionViewFlowLayout實現圖片瀏覽效果的相關資料,需要的朋友可以參考下...

    jiangamh8882021-01-11
主站蜘蛛池模板: 大白屁股一区二区视频 | 免费一级性片 | 国产精品久久久久久久久久久久久久 | av在线一区二区三区 | 91在线免费观看 | 午夜小视频在线 | 九色在线 | 999一个人免费看ww | 精品一区二区免费视频视频 | 国产淫片在线观看 | 色综合久久88色综合天天6 | 素人av在线 | 久久精品亚洲成在人线av网址 | 亚洲狠狠丁香婷婷综合久久久 | 高清av一区| 国产91久久精品一区二区 | 久久精品久久久久久 | 天天干天天草 | 亚洲电影在线 | 久久久久久久久久久久久大色天下 | 伊人久久综合 | 国产精品久久久久久一区 | 午夜在线影院 | 亚洲免费视频一区 | 一区二区三区视频 | 亚洲综合国产 | 婷婷综合色 | 久久久久国产 | 伊人在线 | 国产免费久久 | 久久久精品网 | 天天爽天天操 | 黄色一级片免费 | 亚洲成人一区二区 | 久精品视频 | 国产一级特黄aaa大片 | 久久久99久久久国产自输拍 | 精品国产91乱码一区二区三区 | 免费在线a | 久久草视频 | 在线观看三区 |