>> 天宇劉：哎，怎麼是 它會大家？
這是iOS應用 對目標C研討會編程。
我的名字是劉天宇。
我是一名大三洛厄爾現在， 集中在計算機科學。
因此，在這個研討會上，我 要教你們
如何使一個應用程序，一點點。
耶，興奮吧。
>> 所以，之前，我們甚至開始跳水 到實際編程方面，
讓我們真的非常快說說 你為什麼會想建立一個iOS應用程序？
為什麼如此的iOS真棒？
因此，第一個問題，在第一 事情是相當真棒對我們來說，
尤其是作為CS50 學生，是的iOS
使用目的C.嗯，有 一種新的語言叫做雨燕，
但我們不打算 使用，在本次研討會。
如果你有興趣斯威夫特，有 是一個關於獨立的研討會。
但目標C基本上 C.含義的一個超集
在C使用一切可以 翻譯成目標C
很容易。
>> 正如你可能會看到後，確實 有一些非常基本的語法，是
基本上完全一樣， C和Objective C。所以，
既然你已經採取CS50 了這一步，你已經
知道目標C，至少40％。
此外，蘋果公司有一個非常 強大的API為iOS。
有很多很瘋狂的 東西，你可以用它做。
其中之一是有人 實際上創造了一個iOS應用
用於控制汽車，其中 是非常有趣的。
可能是直升機更精彩。
但是，這是多麼強大 iOS的API即可。
>> 正如你可能有 想通了，現在，
堆棧溢出大概是一 最重要的在線資源
提供給您。
而好消息，對於每一個 單一的問題，你都不可能
想同時建立你的 在目標C最終的項目，
有可能是一個堆棧溢出的答案。
這只是真棒。
除此之外， iOS的是一個真正的平台
在這裡你可以達到一個巨大的 觀眾毫不費力。
它不喜歡的Andr​​oid，在那裡 一切都非常零散。
>> 一切的iOS是統一的。
只要您創建 對於iPhone的應用程序，
你可以很容易端口到iPad， iPad的迷你型，或不同的iPhone尺寸。
這些都是真的很方便。
它只是真的好 為打動你的朋友。
你可以只持有iPhone 告訴你的朋友嘿嘿，
這是應用程序，我做。
你可以這樣做，對於任何 桌面應用程序，這是很好的。
>> 好了，現在讓我們真正得到 成目標語言C.
那麼，我們為什麼不先從 一些非常基本的語法。
正如我之前提到的目標 C時的C的基本上是一個超集
所以很多基本的語法都 實際上完全相同。
聲明一個變量， 加上兩個變量在一​​起
正是因為我們的馬里奧已經完成。
什麼是新來的。
>> 同樣，房客for循環 和條件也是相同的。
你可以做一個循環，你 已經做了馬里奧[聽不清]。
你可以做條件 正如你
一直在做以前的P組。
然而，目標C 不完全是C，
並有東西， 是種奇怪的了。
>> 第一種是，當你 做C語言編程，你通常打電話
包括，然後一個庫名。
但在目標C調用的進口。
基本上說的功能， 只是叫法不同。
和字符串 實際上有點怪異。
你可以看到，第一 這是種奇怪的事情
是，你有一個漂亮的weird-- sorry--你有一個非常奇怪的NS
簽在這裡。
第二件事 這是一種奇怪的
在你之前有一個at符號 實際上宣告字符串。
因此，在標誌的基本意義 一個字符串不僅是字符串，
它實際上是一個對象。
我們要解釋 後來所以不要
恐慌，如果你不這樣做 明白這意味著什麼。
並打印到控制台是一點點 因為不同的C語言，我們調用printf，
但在目標C，我們稱之為[聽不清]。
>> 你可能想知道那是什麼。
這基本上是printf的， 只是不同的語言。
完全相同的用法， 完全相同的功能。
好吧，事實證明 Objective C的實際
有NS前綴幾乎 的一切，每一個基本數據類型，
的NSString，NSArray的，NSDictionary的。
的原因是納秒 實際上代表下一步，
這是一個公司， 史蒂夫·喬布斯已經成立，
這是一個公司，其中 語言Objective C的誕生。
因此，這基本上是傳統。
我知道這是一個有點 怪異，但它是蘋果。
>> 所以，一些甚至怪異 比是一個函數聲明。
這與我們非常不同的 看到C，因為在這裡它實際上
看起來並不像C了。
你有什麼這裡 - 由 這樣，這不是一個小點，
這是一個負號。
你有一個減號括號 無效，那麼函數名。
遠的不說，如果我們 有你好世界，那麼
返回類型是無效 因為我們沒有什麼回報。
>> 什麼才真不可思議 就是當你
具有一個以上的參數 通入一個相同的功能
將是很奇怪的，如下圖所示。
我們有一個方法名， 所謂addInt為[聽不清]
我們正在傳遞一個參數。
但在那之後，我們有 更多的方法名與調用。
經與我們傳遞 第二個參數。
這實際上是一個有點怪異， 但所有這些函數聲明
遵循相同的模式，因為這。
>> 我們有一個減號開始。
減號可能是一個加號 有時是基於什麼樣的方法
就是它了。
方法基本上 另一名功能。
我們要去 解釋說，以後當
我們談論的對象 面向對象編程。
您首先確定回歸 鍵入括號內，
之後出現的方法名。
你傳遞一個參數。
如果你有多個參數 需要延長的方法名稱
基本上寫更多的東西在這裡。
>> 它可以是任何你想要的。
在我們的情況下，它是用。
但你可以說結束，或或或 ABC完整的酒吧，任何你想要的。
然後你之後 傳遞參數b。
這是一個很奇怪 會展但我們
要明白為什麼蘋果要 要做到這一點非常快。
那麼，你如何調用函數？
調用目標函數 C也從不同C.
>> 事實上，調用 在Objective C函數
更像是你與人交談。
在這裡，我們有自我，這 被稱作一個對象。
你基本上說的是 反對自我說的“Hello World！”
這是如何調用該函數。
對象和方法名 彼此結合。
這是怪異的擴展，其中 為方法名真正的用武之地。
>> 讓我們來看看第二個例子。
我們只是定義了一個名為方法 addInt用等等等等等等。
因此，在這種情況下，當你調用 具體[？消息？]這是怎麼回事
看起來像自我addInt：用10：2。
這聽起來像英語。
雖然功能 函數的聲明是怪異，
對目標C的點 方法聲明的模式，
是，當你在呼喚 的函數或方法
它聽起來像實際英語。
所以這是非常直觀的 一旦你進入它。
>> 特別是在這種情況下， 在那裡你可以基本上
看到函數名 排序記錄本身。
你不需要任何 更多的解釋，看看
究竟發生了什麼 只有一個參數做。
超越，讓我們談一點 關於面向對象的編程位。
面向對象編程 基本程序之一
技術或模式，是 使用目標C.目標C
被稱為目標C，不是 C，一個很好的理由。
>> 所以，在我們進入 Objective C的語法，
讓我們真的很快看看 究竟是什麼物體。
我們可能已經做了一些事情 像之前的對象，這
被稱為當你的結構 實施樹或鍊錶
或[？試試。 ？]所以，這是 基本上像一個結構，
但比這更強大。
對象具有的方法和屬性。
方法基本上函數。
基本功能，一個 特定於某個特定的對象。
>> 和屬性基本上是 現場您在結構中指定。
因此，對於每一個對象 我們有一些財產
有一些變量， 特定於對象。
我們有一些職能 也特定於對象。
和功能被調用的方法 和變量被稱為屬性。
它只是一個花哨的名字。
當你事實上，每一個單一的視圖 你看，當您打開一個iOS應用程序，
讓我們只說Twitter或Facebook， 你看到的每一個觀點是一種對象。
乃至整個應用程序是 開始與一個對象。
非常有趣的概念。
>> 為什麼我們要的對象 面向對象編程？
所以你可以想像，當你 程序也變得相當複雜。
遠的不說，當你 實施棋盤，
邏輯將要 可以非常複雜。
你有36種不同的 件，所以，如果
想寫邏輯所有 36個不同的國際象棋，
那將是一個很大的 不同的函數和變量。
這是一個很大的麻煩。
大概你會寫 不同的方法或不同的功能
對每個片的至 精確控制他們做什麼。
>> 但是，如果你做的面向對象 編程，所有的這些作品
可以抽象成 一個單獨的對象。
與該對象將具有一些共同 性能，喜歡什麼樣件
是什麼呢？
它是什麼顏色？
它如何移動？
並以這種方式有很大的 簡化了它的邏輯。
所以它只是一個非常好的辦法 作複雜的程序，
和層次關係 在程序中，很簡單的。
正如我們將看到 為什麼非常快的時候
我們實際上在做 programming--當我們真正
做一個S碼 以後的編程會話。
>> 井除此之外， 面向對象編程
僅僅是一個很大的樂趣。
你必須設計自己的對象。
你一定要設計什麼呢 它看起來像自己。
沒有正確的答案。
它是完全有趣。
所以在面向對象的編程， 兩個基本概念
將類和實例。
一類是基本 一個模板為對象。
和一個實例是基本上 一個特定對象。
>> 遠的不說，你正在做一個cookie。
在這種情況下，每單 餅乾，你居然落得
將是一個對象。
但餅乾板用來烤 所有的餅乾將是一個類。
一類是基本的模板。
和實例將是一個具體的 對象創建出一流的。
>> 和實例將被創建 基於類的聲明，
我們將在以後的幻燈片中看到。
因此，讓我們實際上做一個真正 簡單的例子[聽不清]。
比方說，我們正在申報 對象為一隻貓。
對象應have-- 如若貓類
有一些屬性和方法。
什麼樣的屬性應該在的 類have--應該貓有哪些？
>> 例如，顏色， 年齡和品種，這些
將變量 特定於每個貓。
而這些都是一些事情 我們用來形容一隻貓。
什麼樣的方法， 或者有什麼可以一隻貓嗎？
一些簡單的例子就追 鼠標，吃魚或只是喵。
這是一個非常快 例如貓類。
而一個真正的特定 貓物體將是一個貓
在這裡我們指定 顏色，年齡和品種。
>> 在這種情況下，我們的目的是 不再是一個類了。
我們複製的模板從類和 我們指定每個具體信息
到該特定對象 使其獨立。
而當你在呼喚 對象內的方法，
你只需要調用喵的對象， 這是您剛才創建的貓。
>> 也許你會打印出 類似的“Hello World！
喵。“
漂亮可愛。
好吧，讓我們只 進入一些細節
看看究竟是什麼 翻譯應運而生的iOS編程。
因此，在iOS的編程每一個 類將在兩個文件中予以實施。
一個文件是在這裡，這 被稱為接口。
另一個文件是在這裡，這 被稱為實施。
>> 通常情況下，接口 將有extension.h
正如我們所看到的C庫。
和實現文件 將有extension.n。
這是一種奇怪的。
但是.N指實際的.c，沒有 那些之間的根本區別
2。
所以在這種情況下，我們可以看到，我們是 聲明接口，貓：對象。
這就是所謂的繼承。
我們基本上繼承 從Object類貓類。
所以，每一個屬性和方法，這是 先前在該對象類中定義
將被自動定義 在貓類也是如此。
>> 除此之外，我們定義顏色， 品種和年齡，三個變量。
實際上看起來像 一些你以前做過。
它看起來像結構。
即基本上語法 對結構聲明，
那是完全正確的。
因為我之前提到的， 區別一個struct
和一個對象，所述一個 根本分歧
是，一個對象具有的方法， 而結構只有變量。
因此除了屬性或 我們已經為對象創建的變量，
我們指定的一些方法。
>> 遠的不說，我們在這裡有 兩種方法，一種是喵，
另一個是追逐鼠標。
我們可能要被傳遞 基於我們以前的方法參數
聲明格局。
你可能想傳遞一個鼠標。
你可能會想 返回一個布爾表意
如果你的貓已經成功 捉住了老鼠與否。
>> 這是接口，但我們可以 看到實際的接口
沒有做任何事情。
它只是講述了一個什麼樣的程序exists-- 在貓類的東西存在。
所以，為了使 計劃做一些事情，
我們需要有執行文件。
所以在這裡，我們做的第一件事就是 很明顯，我們導入的接口。
當我們導入接口， 我們定義該方法。
>> 遠的不說這裡喵 將剛剛打印出來
“你好世界！”到控制台。
並實施後， 文件中，我們幾乎完成。
這基本上是一個類 聲明一個類。
所以，現在的問題是， 你如何聲明一個變量？
該方法使用一個類來創建 在Objective C的對象是寫在這裡。
>> 你先指定 這是一隻貓的指針，
因為在目標C中的每個對象 最終實現為指針。
你調用類，給他們打電話 作為ALLOC，這基本上是malloc的，
告訴操作系統您 需要這個對象的一些內存空間。
之後，你有一個對象 已經和你只是初始化。
這僅僅是慣例。
我知道這是一個有點怪異，但 這是蘋果公司實際上是怎麼做的東西。
>> 分配的屬性是 其實很簡單。
這是非常相似 你在做什麼時，
你分配一些特定的 場結構內。
你只需變量 名，屬性名，
並指定一個特定值到它。
和調用方法非常相似。
調用的方法是 基本上是我談談
調用的目標C.任何方法
>> 你傳遞一個對象，在 這種情況下，將是myCat，
而你傳遞的方法名。
因為如果你在談論的對象， myCat，你應該喵。
這是很有趣的。
在這之後，有一 更重要的設計模式
我們需要談談 之前獲得實際的S碼。
該設計圖案被稱為 事件驅動編程。
這也是最大概1 基本思想在iOS的編程。
>> 所以，你可能不知道究竟是什麼 是事件驅動編程，
但它不是真的那麼可怕。
其實嘛，你有 已經做之前。
這是你可能的線路之一 已經寫在最後[聽不清]
CS50的， google.maps.event.addListener（標記，
“點擊”功能（）{}）:.
通過調用這一行你 實質上就是告訴計算機
每當事件被稱為 “點擊”發生在標記，
使用該功能。
>> 這是非常不同 你在做mario.c。
在mario.c你只要運行該程序 一次，它給你的輸出，
就大功告成了。
這些都是有點像 一桿的方案。
事件驅動程序 是非常，非常不同。
讓我們想像一下，如果Facebook是一個 拍攝計劃它不是真正的好。
你只要去到Facebook 一次，它的完成。
它給你一些輸出 你從來沒有回來。
你從來沒有得到任何東西。
>> 所以在這裡，特別是 我們使用模式是
事件驅動的，從而使 每一個功能都會
根據被抓什麼 事件已經發生了。
例如，如果我們有 一個按鈕，我們指定
只要單擊該按鈕， 調用調用的函數的“Hello World！”
這樣，我們才能真正 管理功能邏輯
流在一個高度靈活的方式。
用戶可以做或調用一個函數 已被調用。
它完全基於哪些用戶做。
>> 所以我們可以看到，這是 比mario.c實際上要好得多。
而好消息是，它的 其實並不是一個新的概念。
你們已經做了 在最後一個問題集。
因此，在目標C有 三種不同的圖
事件驅動編程。
第一個圖是 所謂目標的行動，
在那裡你綁定按鈕 記者與一些功能。
遠的不說，只要你點擊 一些按鈕，你調用一些功能。
這是非常簡單的目標採取行動。
>> 第二個是 實際上最難的之一，
這就是所謂的協議，代表團一行。
我們要解釋 在偉大的詳細版本。
而第三種方式是通知。
這實際上是不 非常重要的，因為遠
作為我們來講，因為機會 你要使用的通知
在最終的項目是相當低的。
所以我們要跳過這一部分。
>> 我們要去潛水 插入協議的代表團。
那麼究竟什麼是協議？
或者，究竟是代表團？
讓我們來談談協議開始。
協議是什麼，但事件。
但是，這些事件被提供給 您可以通過蘋果開始。
舉例來說，我不是 完全確定你們有多少人
人使用蘋果的原 應用程序的郵件或聯繫人，
但每次滾動 表，並按特定細胞
在桌子上，也就是一個事件。
>> 如果你想要做的 該事件自己，
它實際上是一個有點硬。
因此，蘋果已經考慮到甚至你 讓你可以直接使用
事件做一些你自己的。
協議實際上是 真的，真的很廣泛的應用
在Objective C.井 事實上，每一個單一的應用程序
有東西抓住了應用程序委託。
裡面的細膩是一切的 協議用於裝載應用程序。
>> 遠的不說，有 事件的應用程序做負載。
所以會發生什麼你已經經過 創建一個應用程序，打開應用程序後，
關閉應用程序，或在後 你把iPhone睡覺。
這些是具有所有事件 已給你。
這些顆粒原本裡面 就沒有實現。
蘋果只是告訴你，這個功能 當一些事件發生的會發生，
但你做了什麼與 功能是完全取決於你。
>> 代表團基本上是 告訴類
你應該處理這些協議。
這是一個有點 混亂，但是這將是
當我們做更清晰 在S碼的行動。
代表團的協議實際上是一個 非常穩健的機制在這個意義上
如果我們做的代表團 到一個特定的類，
我們基本上可以處理 各類賽事
使用任何類，我們有， 非常方便的工具。
>> 因此一個簡單的例子為 在協議授權
將是我剛才講的。
該協議明確被稱為 的tableview [聽不清]選擇角色
在[？指數？] [？過去的。 ？]所以這一個 事件會被抓住，當你
實際上點擊一個特定的 細胞在你的tableview，
我們只能說在您的郵件 或者在您的聯繫人應用程序。
>> 裡面的功能有 本來無所事事。
該功能不 做默認情況下任何東西。
但是，你可以指定 功能做什麼，
給你想要你的應用程序中。
非常方便的工具。
並與所有的 雖這麼說，我基本上
包括一些非常基本的語法和 對目標C基本概念
編程，我們可以做一些S碼。
更令人興奮。
因此S碼實際上是為 有點勢不可擋
當你打開它的第一次。
>> 一個快速的注意，因此，如果您 想要做iOS開發，
我強烈建議你有一個蘋果。
因為這樣做iOS開發上 Windows是真的，真的很難。
這是可行的，但它真的很難。
你肯定做 不想用G編輯。
因此，在S碼我們 幾個不同的區域。
當你第​​一次打開S碼 你會看到一個導航區域，
這基本上說明你一切 文件是當前項目。
>> 你有一個工具欄區域， 基本上是管理的意見，
或者一些小快 關於S碼本身的工具。
而這是實際的編輯器區域。
這個地區是非常相似克編輯， 但遠比克編輯好。
在這方面的權利，是 所謂的實用面積。
該地區變得非常方便時， 你創建的界面或指定
一些快速設置為您的應用程序。
>> 和最終面積的調試。
此區域包含控制台。
所以每當你說的printf， 或者NSLog的在我們的情況下，
所有的結果 將要在這裡進行打印。
行？
我想我們真的可以做到迅速 一個例子為iOS編程。
讓我們實際打開了S碼。
所以每次你打開S碼的時候，它的 將出現類似的東西。
它會問你 你想讓我做什麼？
你想啟動的東西 隨機的，操場，基本上你
可以測試代碼，而無需 實際上犯任何應用程序。
>> 你想創建一個新的項目？
或者你想繼續 工作在現有的項目？
在我們的例子中，我們要去 創建一個新的項目。
所以這是非常好的，S 代碼實際上早已
給你一些模板 創建對象。
如果你想要做一個遊戲，S碼 實際上有一個遊戲的模板給你，
有一個基於網頁的應用程序， 標籤的應用程序。
在這種情況下，我們要 做的東西很簡單，
而我們將使用 單一視圖的應用程序。
>> 之後，只是你想叫什麼 您的產品，你叫什麼名字，
什麼是你的標識， 你用什麼樣的語言。
在這裡，我們不希望 檢查使用核心數據。
核心數據基本上是建庫的iOS。
如果你做的核心數據，S 代碼是要限定
很多更複雜的類為您服務。
所以把一切都簡單，我們 剛準備做沒有核心數據
現在。
>> 我們將是問題 使用是that--問題
我們將要建立的是，我們 基本上想從C導入馬里奧
一個iOS應用。
因此，讓我們稱之為馬里奧的iOS。
當然你指定你 想要把你的項目。
還有，我們走了。
>> 所以這是一個有點 鋪天蓋地，但其實這是
我們剛才看到的幻燈片。
和第一方面，我們看到現在 基本上是項目配置。
所以一切你想做的事 項目，什麼樣的設備，
讓我們只說什麼樣的設備 你想你的應用程序出現在？
它是iPhone，iPad還是通用？
所以設備的方向，這一切的東西。
不是很重要， 但也可以是，但這種
就是你設置了一個地方 你的項目，如果你真的
要部署到蘋果專賣店。
>> 好吧，讓我們來看看 東西是我們的代碼中。
讓我們通過文件導航。
而這些所有的文件已經 附帶的模板，非常漂亮。
所以，當我們點擊其中一個 這是什麼樣子。
非常相似克編輯。
但是你可以看到， 語法高亮可能
一點點更好。
它實際上更 強大的比克編輯。
並且可以自動完成 很多東西你，
正如我們所看到的非常快。
>> 讓我們打開調試方面也是如此。
好吧，我們可以看到， 控制台就在這裡。
這是你將成為怎樣看哪裡 你在printf的或nsloging東西。
因此，事不宜遲，讓我們真正 編譯應用程序，看看會發生什麼。
對於一個基本特徵 S碼，是S碼
配備了一個iPhone模擬器。
所以，你不需要有一個 iPhone試試你的項目，
S碼可以模擬，對於 你，我們可以看到現在。
>> 這是相當不錯的。
它採取了一些 時間位編譯
基本上我們有 一個空的應用程序，
這實際上什麼都不做。
但它編譯。
這是相當真棒。
這比C好得多，是吧？
好了，接下來就讓我們 嘗試添加一些東西。
一個文件，該文件是一點點 奇怪的是這裡所謂的故事情節。
這實際上是一個偉大的， 真棒功能的S碼。
因為在S碼的，你其實可以拖動 拖放元素到接口
它會直接顯示出來。
讓我們來試試。
>> 我們放棄一個標籤在這裡的“Hello World！”
我們可以說為中心。
很酷。
現在讓我們來運行這個停止模擬。
在這裡，我們的“Hello World！”
我們甚至沒有做任何編碼呢。
你到底是怎麼回事？
這是多麼強大 Interface Builder中即可。
有人甚至說， 你可能只
完成無需編寫一個應用程序 大概一千行代碼
只是使用界面生成器。
但它可能不是 最好的辦法做到這一點。
>> 現在，讓我們真正坐下來編碼。
這樣的結構的文件 其實真的很有趣
因為，你可能會看到，有 沒有主要功能的任何地方。
看到了嗎？
正如我們之前所提到的， 你可以看到這
是一個實現文件 對於一個特定的類。
但是沒有任何地方為主。
那麼，是主要的？
實際上，有一個主，但 主實際上是從你隱藏。
主要是在這裡。
這看起來很熟悉。
>> 所以基本上什麼的iOS 正在做內部的主
是，每當主要是 叫，這基本上是
每當應用程序被執行，它 創建一個名為的AppDelegate對象。
正如我前面提到的，整個 應用程序實際上是一個對象本身。
因此，在這種方式，基本上 iOS應用程序是在告訴編譯器
那好吧，我要創建 一個名為AppDelegate中的產品，
那將是我的應用程序。
所以，你需要去 通過的AppDelegate
，看看那傢伙在做什麼。
我的工作是為我做的。
>> 而在AppDelegate中可以看到， 也有一些很奇怪的功能，
其實好方法，即 蘋果已經給了你。
這些是什麼？
這些實際上只是協議 我在說什麼。
因此，這些都是事件，蘋果 給你下手。
有沒有在一些 現在的功能，
但如果我們想初始化 東西給我們的應用程序
進入前顯示 任何看法，我們在這裡。
>> 你可以閱讀的名字，我猜 事件實際上是真正清楚。
所以，現在的主要創造 的對象的AppDelegate。
什麼的AppDelegate是要幹什麼 居然還藏著你。
在AppDelegate中即將開始 加載的ViewController股票。
因此，它基本上將開始 加載了所有你有意見
，只是渲染視圖 基於層次上。
>> 因此，在這種情況下，我們只有 一種觀點認為，這是在這裡。
所以這是唯一的視圖 那將被調用。
該邏輯的ViewController是在這裡。
這是代碼實際上是 控制我們剛才看到的視圖。
好吧，讓我們做的東西在這裡。
所以viewDidLoad中聽起來像一個事件， 而事實上，這也是一個委託，
這也是一個協議。
>> 所以，無論視圖被加載， 一切都在函數內部
將被調用。
在這種情況下，我們應該看到“Hello 天宇！“如果我們運行程序。
它變得有點慢 編譯故事板文件。
確實很好，我們確實看到了它的輸出。
這實在是太酷了。
現在，讓我們真正做到馬里奧。
我要去定義 傳播非常快。
marioWithLevels：（INT）水平的結果。
>> 好吧，這其實是真棒 第代碼自動完成功能。
所以，當你寫，然後鍵入回車， 它已經放棄了模板
對你來說，這是很酷。
這應該是真的 熟悉你們。
對不起，這是我的錯。
好吧，冷靜。
這個邏輯看起來真的很熟悉 到你們，特別是剛馬里奧。
>> 但我們現在將打印出來 控制台每一次，
因為我們希望以某種方式繼續 賽道是我們打印的。
我們將使用 結果後來不知何故，
顯示打印 出結果給用戶。
因此，而不是我們只是 nslogging一切，
這是我們要存儲的一切 成一個函數調用的結果，
但邏輯是完全一樣的。
當我們完成它，我們 只是打印我們的結果。
>> 在這裡，而不是打印出我的 名，我們將調用一個函數。
讓我們看看會發生什麼。
哎呀，很明顯。
我們有一個很好的 小金字塔在這裡。
這基本上是C，我們只是 操縱在那裡你調用一個函數
而如何做一個功能是什麼樣子。
沒有什麼不同。
但其實這是 不是很令人興奮的在這裡，
因為我們沒有看到 任何從iPhone應用程序。
>> 所以，如果你真的有一個iPhone app-- 如果你確實有馬里奧的iOS權
現在，你不會 看到什麼，
有什麼關係，因為馬里奧 所有輸出到一個控制台
從用戶是隱藏的。
這就是你所看到的， 這就是的“Hello World！”
不好。
現在，讓我們盡量讓用戶看 究竟我們要打印出來。
因此，我們就不需要了標記。
讓我們試著找出什麼 否則，可能是有用的。
>> 其實是有1 被稱為元件
文本字段，這可能 有很大的幫助我們。
它主要顯示區域 文本的可編輯。
所以，看起來真的很有幫助。
現在，讓我們將其拖放它。
哇，我們有一個文本視圖 在我們看來，真正看中的。
這是一個有點太大了。
讓我們把它縮小。
把它放到中心。
使其更小為好。
>> 現在我們有一個文本視圖，我們可以 被用於顯示我們的最終結果。
但現在它的 絕對行不通的
因為有no--的 我們的ViewController剛
定義不知道 有一個文本視圖在那裡。
因此，我們需要以某種方式 鏈接文本視圖，我們只是
與類創建 已經和我們一起去。
>> 我們這樣做的方式是 居然真的神奇。
因此，開拓故事情節。
有一個特殊的[聽不清] 所謂的[？助理？] [聽不清]。
當您單擊的是，它的 要打開兩個文件。
一個是一類，而另一個 為它的相應視圖。
這是非常，非常有幫助。
讓我們剛剛經歷.h文件。
控制，這是[聽不清]邏輯。
按Ctrl並拖動 文本視圖進入申報。
我們將調用outputView。
連接。
所以在這裡，我們已經宣布了新的 物業為我們的ViewController類。
而新的物業 僅僅是文本視圖
我們已經在界面的建設創造。
因此，在這種方式我們可以 訪問所有數據
和操縱一切，是裡面 輸出來看，這是真棒。
>> 因此，在我們實際的代碼， 讓我們用它做什麼。
所以這個時候，我們都喜歡印刷 從最終的結果馬里奧，
我們在沒有任何記錄。
我的意思是，我們能保持 記錄的聲明。
除了這一點，我們 送讀出我們只是
創建的，在輸出圖，其中 TextView的是我們剛剛創建的UI。
現在，讓我們看看會發生什麼。
哇。
我們在應用程序中的金字塔現在。
>> 這樣用戶就可以看到我們的輸出，因為 我們複製我們的代碼的輸出
我們的接口。
這是相當不錯的。
它實際上不是 令人興奮，因為我們can--
所有的應用程序正在做的是 呈現出金字塔給你，
還有就是你可以做些什麼。
這不是特別令人興奮。
所以，現在讓我們做一個按鈕 這將明確的意見。
看來，一個按鈕會有所幫助。
拖放。
按鈕之一。
兩個按鈕。
>> 所以，當我們點擊左側 按鈕，在視圖應該清除。
應該有什麼在屏幕上。
當我們點擊 右邊的按鈕，馬里奧，
認為會再次出現。
所以這樣一來我們也做了 神奇的東西，控制和阻力
在類的聲明 在助手director--
在助手觀眾。
在這種情況下，我們指定 這應該是一個動作。
clearMario。
>> 所以在這裡，我們已經創建 所謂clearMario一個動作，
這是將被調用的方法 當我們按下按鈕清晰。
因此，在我們實際的代碼，我們只 把輸出文本和輸出視圖
到一無所有，這樣 它會顯得清晰。
除此之外，讓我們創建 另一種方法叫runMario。
噢，對不起，這不應該是一個屬性。
好吧，這應該 成為一個動作為好。
>> 而當該功能是 所謂的，我們只需運行馬里奧10。
希望這將是罰款。
它編譯？
是。
現在我們有一個觀點。
我們有一個輸出。
讓我們只看看會發生什麼。
這走了。
這是回來了。
所以在這裡我們已經指定 什麼樣的功能
將被調用時， 我們在什麼類型，
當我們按下特定的按鈕。
這基本上是 目標的行動計劃
事件驅動 在Objective C.編程
>> 除此之外， 這是不是很令人興奮
因為我們無法真正改變 有多高的金字塔會，
所以我們可能需要以某種方式 獲取來自用戶的輸入
和改變的高度 金字塔的基礎上，他們的輸出。
所以，我們要做到這一點。
所以，當我們稱之為runMario這個時候， 我們不只是直接調用馬里奧。
這一次的冠軍。
>> 委託。
這是很有趣的。
什麼是代表？
我打算把自這裡。
我們將看到 什麼較晚。
所以在這裡我們已經基本建立了一個 具體的實例調用一個UI警報
視圖。
一個UI警報視圖是 基本上你會是什麼
每次看到一些持久性有機污染物 並要求您輸入，
就像當你想會發生什麼 購買的東西上的應用程序商店。
>> 除此之外，在你 創建它，我們只是展示了警報。
好吧，就讓我們快 測試將這項工作與否。
這是非常酷的。
現在，讓我們實際創建 輸入字段的UI警報。
這是我們如何做到這一點。
我們應該有一個 為警報輸入視圖。
非常酷。
遠的不說，10。
>> 它沒有做任何事情的權利 因為現在實際上是調用
並沒有改變執行馬里奧。
所以這已成為一個小 有點不可思議，因為每當
我們按一個按鈕，每當我們 在警報視圖按下一個按鈕，
事情應該發生， 但它並沒有發生。
我們如何趕上？
我們怎麼知道用戶 已經駁回了警報視圖
並且已經進入了一個號碼，因為 現在什麼也沒有實際發生。
>> 嗯，你可能已經猜到了 它的權利，代表團一行。
因此，除了所有 這些聲明，
我們需要添加一個新的代表團 它所謂的UI警報視圖委託。
讓每一個 互動或事件
那我們將有 與UI警報視圖
將要被處理的 通過我們的類為好。
>> 因此除了是，將 在索引警報視圖點擊按鈕。
此為止。
因此，在這種情況下，我們有 already--所以我們有
發現了一個協議， 將處理該事件時，
我們點擊完成按鈕 在警報視圖。
所以每次我們解散 警報看來，這應該發生。
讓我很快測試。
好吧的確，我們在這裡達到了。
>> 所以在這裡，我們將不會有什麼 實際上得到的是實際
得到the--所以我們想出去 我們有以前的文字
在警報視圖輸入。
而基於文本，我們 要顯示馬里奧。
這很快證明 如果實際工作與否。
因此，在這種情況下，如果我們的輸入， 比方說，10日，我們應該看到10。
>> 非常好，我們在這裡做的有很多。
這是相當不錯的。
現在的最後一步將be--所以 最後一步，我們需要做的事情
只是一個叫馬里奧 級別基於輸入
我們已經投入警報視圖。
因此，我們需要轉換 這串入的iOS。
靜溢很真棒。
然後我們只需調用自 marioWithLevels值。
讓我們來看看這會 實際工作或沒有。
>> 我們已經給出一個金字塔。
讓我們試著改變高度。
實際工作。
這實在是太酷了。
所以，現在你可以 輸入你想要的任何值。
遠的不說，四名。
這是相當真棒。
所以這基本上是 一個真正簡單的例子
對於如何在S碼項目 而如何真正快速連線了
一些很簡單的活動和功能。
>> 因此源會 可後來在網上放。
所以，如果你有興趣 在iOS的馬里奧是如何工作的，
我打算把一模一樣的 項目到CS50網站後。
我們基本上用做 夏天到了，才完成
我只是想你點傢伙 一些真正真棒資源
可在網上。
>> 顯然，蘋果公司文檔 將是非常有益的。
但除此之外，我特別 推薦四個來源，學校代碼，
樹屋，AppCoda和WWDC視頻。
代碼學校，樹屋是 兩個在線育人的網站，
其中特別關注 軟件工程。
特別是對學校的代碼，他們 對iOS的真正的好教程。
>> 這是一個非常簡單的例子吧。
他們實際上創造一個真正cute-- 看看這個小可愛iPhone
花花公子那邊，這是相當真棒。
和他們的方式解釋目的 C語法是完全清楚的。
樹屋是一樣的。
和AppCoda是一個論壇。
它實際上是運行一個博客 一個真正有經驗目標C
程序員。
而在AppCoda所有這些教程 很短，很容易實現，
強烈推薦。
>> 如果你是一名開發人員， 肯定是去檢查
在那裡你可以如何WWDC視頻 了解最新的iOS編程
技術，API和庫。
所以這是一個很值得 它的研討會。
太謝謝你了。
我希望你玩得開心 創建自己的iOS應用。