您的首個iOS應用程式-創建項目

来源:https://www.cnblogs.com/ken134207/archive/2019/01/04/10220103.html
-Advertisement-
Play Games

一、 iOS應用程式是如何啟動的: 1) main.m 中的 main 函數調用自動釋放池 (autorelease pool) 中的 UIApplicationMain 函數: @autoreleasepool { return UIApplicationMain(argc, argv, nil, ...


 

   一、 iOS應用程式是如何啟動的:

  1.  查看main.m源文件
      • 1) main.m 中的 main 函數調用自動釋放池 (autorelease pool) 中的 UIApplicationMain 函數:
      • @autoreleasepool {
           return UIApplicationMain(argc, argv, nil, NSStringFromClass([HelloWorldAppDelegate class]));
        }

        2)讓我們來看一下這段代碼

      • @autoreleasepool:自動釋放池,在MRC(手動引用計數)機制下可用於管理記憶體,Xcode預設是在ARC(自動引用計數)機制下
      • UIApplicationMain的四個參數
      • argc:系統或用戶傳入的參數個數
      • argv:系統或用戶傳入的實際參數
      • principalClassName:指定應用程式的類名(app的象徵),該類必須是UIApplication類或子類。如果為nil,則用UIApplication類做預設值。
      • delegateClassName:指定應用程式的代理類,該類必須遵守UIApplicationDelegate協議
      • 這段代碼所做的事情:

        調用 UIApplicationMain 創建了一個 UIApplication 類的實例和一個應用程式委托的實例(在本例中,應用程式委托是 HelloWorldAppDelegate,由單一視圖模板提供)。應用程式委托的主要作用是提供呈現應用程式內容的視窗,在應用程式呈現之前,應用程式委托也執行一些配置任務。(委托是一種設計模式,在此模式中,一個對象代表另一個對象實現功能,或與另一個對象協調配合進行工作。)

        在 iOS 應用程式中,視窗對象為應用程式的可見內容提供容器,協助將事件傳遞到應用程式對象,協助應用程式對設備的擺放方向做出響應。視窗本身是不可見的。

        調用 UIApplicationMain 也會掃描應用程式的 Info.plist 文件。Info.plist 文件為信息屬性列表,即鍵和值配對的結構化列表,它包含應用程式的信息,例如名稱和圖標。

    • 補充:

    • 1.根據傳入的第三個參數創建UIApplication對象,負責監聽事件

      2.根據傳入的第四個參數創建一個delegate對象,並將該對象設為UIApplicationd對象的代理,負責處理事件

      3.接著會建立應用程式的Main Runloop(事件迴圈),這個事件迴圈是一個隊列(先進先出),進行事件的處理(首先會在程式完畢後調用delegate對象的application: didFinishLaunchingWithOptions:方法),程式正常退出時UIApplicationMain函數才返回

    •    iOS應用程式啟動原理
  • 程式啟動的完整過程

    //1.main函數

    //2.UIApplicationMain

    // 創建UIApplication對象

    // 創建UIApplication的delegate對象

    //3.delegate對象開始處理(監聽)系統事件(在沒有storyboard中的創建過程)

    // 程式啟動完畢時,會調用代理的application:didFinishLaunchingWithOptions:方法

    // 調用application:didFinishLaunchingWithOptions:方法創建UIWindow

    // 創建和設置UIWindow的rootViewController

    // 顯示視窗

    //有storyboard中的創建過程

    //3.根據Info.plist獲得最主要storyboard的文件名,載入最主要的storyboard

    //創建UIWindow

    // 創建和設置UIWindow的rootViewController

    // 顯示視窗

       二、查看屬性列表文件(Info.plist)

          Info.plist

          因為您已選取在項目中使用串聯圖,所以 Info.plist 文件還包含應用程式對象應該載入的串聯圖的名稱。

          串聯圖包含對象、轉換以及連接的歸檔,它們定義了應用程式的用戶界面。

            在“HelloWorld”應用程式中,串聯圖文件命名為 Main.storyboard(請註意 Info.plist 文件只顯示這名稱的第一部分)。

            應用程式啟動時,載入 Main.storyboard,接著根據它對初始視圖控制器進行實例化。

            視圖控制器是管理區域內容的對象;而初始視圖控制器是應用程式啟動時載入的第一個視圖控制器。

          “HelloWorld”應用程式僅包含一個視圖控制器(具體來說就是 HelloWorldViewController)。

          現在,HelloWorldViewController 管理由單視圖提供的一個區域的內容。視圖是一個對象,

          它在屏幕的矩形區域中繪製內容,並處理由用戶觸摸屏幕所引起的事件。一個視圖也可以包含其他視圖,這些視圖稱為分視圖。

          當一個視圖添加了一個分視圖後,它被稱為父視圖,這個分視圖被稱為子視圖。

           父視圖、其子視圖以及子視圖的子視圖(如有的話)形成一個視圖層次。一個視圖控制器只管理一個視圖層次。

          註:“模型-視圖-控制器”(Model-View-Controller, MVC) 設計模式定義了應用程式對象的三種角色,

         “HelloWorld”應用程式中的視圖和視圖控制器,體現了其中的兩種,而第三種為模型對象。

          在 MVC 中,模型對象表示數據(例如日曆應用程式中的待辦事項或繪圖程式中的圖形),

          視圖對象知道如何顯示模型對象所表示的數據,控制器對象充當模型和視圖的媒介。

        三、查看串聯圖

          串聯圖

      

        串聯圖包括場景和過渡。場景代表視圖控制器,過渡則表示兩個場景之間的轉換。

        因為“Single View”模板提供一個視圖控制器,應用程式中的串聯圖只包含一個場景,沒有過渡。畫布上指向場景左側的箭頭

        是“initial scene indicator”(初始場景指示器),它標識出應用程式啟動時應該首先載入的場景(通常初始的場景就是初始視圖控制器)。

        在畫布上看到的場景稱為“Hello World View Controller”,因為它是由 HelloWorldViewController 對象來管理的。

       “Hello World ViewController”場景由一些項目組成,顯示在 Xcode 大綱視圖(在畫布和項目導航器之間的面板)。

       現在,視圖控制器由以下項目組成:

       一個第一響應器占位符對象(以橙色立方體表示)。

    • “first responder”是一個動態占位符,應用程式運行時,它應該是第一個接收各種事件的對象。這些事件包括以編輯為主的事件(例如輕按文本欄以調出鍵盤)、運動事件(例如搖晃設備)和操作消息(例如當用戶輕觸按鈕時該按鈕發出的消息)等等。本教程不會涉及第一響應器的任何操作。

    • 名為 Exit 的占位符對象,用於展開序列。

      預設情況下,當用戶使子場景消失時,該場景的視圖控制器展開(或返回)父場景——即轉換為該子場景的原來場景。不過,Exit 對象使視圖控制器能夠展開任意一個場景。 

    •  HelloWorldViewController 對象(以黃色球體內的淺色矩形表示)

    • 串聯圖載入一個場景時,會創建一個視圖控制器類的實例來管理該場景。

    • 一個視圖,列在視圖控制器下方

    • (要在大綱視圖中顯示此視圖,您可能要打開“Hello World View Controller”旁邊的展示三角形)。

      此視圖的白色背景就是在 Simulator 中運行該應用程式時所看到的背景。

    註:應用程式的視窗對象在串聯圖中並未表示出來。

    畫布上,場景下方的區域稱為場景台。現在,場景台顯示了視圖控制器的名稱,即“Hello World View Controller”。

   其他時候,場景台可包含圖標,分別代表第一響應器、Exit 占位符對象和視圖控制器對象。

 

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 資料庫命令規範 1. 所有資料庫對象名稱必須使用小寫字母並用下劃線分割 2. 所有資料庫對象名稱禁止使用mysql保留關鍵字(如果表名中包含關鍵字查詢時,需要將其用單引號括起來) 3. 資料庫對象的命名要能做到見名識意,並且最後不要超過32個字元 4. 臨時庫表必須以tmp_為首碼並以日期為尾碼,備 ...
  • 一、知識點 給Oracle的date類型欄位設置預設值【設置為當前時間】 二、發生問題 【顯示結果】 【實際結果】 三、主要原因 在資料庫設計中,時間欄位應為Date類型,如果設置成Varchar就會造成這種情況。 四、解決方法 將varchar類型修改成Date類型。 ...
  • 關鍵字的個數等於路的個數減1。 一個二叉樹節點可以存儲4kb大小的數據,假如關鍵字是整型的一個關鍵字占用4byte,其他數據冗餘4個位元組 4 kb = 4*1024 byte = 4096 byte。 4096/8 = 512 也就是說一個節點中可以存儲512個關鍵字。 多路平衡查找樹如何保證絕對的 ...
  • 一、 簡述 Xcode 提供了對象庫,您可以將庫中的對象添加到串聯圖文件。其中的一些對象屬於視圖中的用戶界面元素, 例如按鈕和文本欄。其他對象為高級對象,例如視圖控制器和手勢識別器。 二、添加用戶元素 1.將UI元素添加到視圖並適當進行佈局 1)打開對象庫 Xcode10以下: 對象庫出現在實用工具 ...
  • (拂樹濃舒碧,縈花薄蔽紅) 新建Android項目,修改為Module 新建一個android項目 給項目命名,這裡命名為MyLibrary,作為可引用的Module項目 點擊下一步,選擇一個Activity,點擊ok 下麵將這個android工程改為Module庫: 在app的gradle下進行設 ...
  • (色含輕重霧,香引去來風) 在Android Studio中,將項目打包成jar包,按照網上說的方法打包完成後,在intermediates文件夾下沒有bundles,AS版本3.1.2,後來發現,原來是intermediates/packaged-classes替換了intermediates/b ...
  • 安卓端 難點有兩個 收款碼的生成和到帳監聽 需要源碼加 2442982910 ...
  • 以下均為自己在Android ble開發項目中遇到的問題 1.儘量不要在BluetoothGattCallback裡面的回調函數中執行讀寫通知操作,最多一個,因為例如在onServicesDiscovered回調函數中只會傳一個寫操作,不管裡面有多少個,而通知如setCharacteristicNo ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...