iOS開發60分鐘入門
本文面向已有其它語言(如Java,C,PHP,Javascript)程式設計經驗的iOS開發初學者,初衷在於讓我的同事一小時內瞭解如何開始開發iOS App,學習目標包括:
- 能使用Xcode IDE、模擬器
- 能修改、除錯已有iOS App
- 能在已有應用內建立新模組
- 能建立新應用
- 能釋出應用到App Store
本文不包含任何高階的iOS開發知識,已學會iOS開發的同學不要看,看完這篇文章學會了的同學也不用再看了。
不僅是學習一門新語言
有過指令碼開發經驗的人(如Javascript,PHP,Shell)在剛開始學習iOS開發的時候,會覺得iOS開發的學習曲線比指令碼語言要高,是的,這種感覺是對的。因為學iOS開發,不僅是學習一門新語言,它包括:
- 一門語言:Objective-C
- 一個框架:Cocoa Touch
- 一個IDE:Xcode
初學指令碼語言通常不會來繪製圖形介面、與人互動,iOS如果不做圖形介面,像指令碼語言一樣處理文字操作資料庫,就沒啥意思了。 所以,過去我寫別的新手入門教程,通常都是寫《XXX入門15分鐘教程》,而iOS就要花數倍的時間來寫了。
環境準備
做iOS開發一定要有蘋果的軟體環境:Mac OS作業系統、Objective-C編譯器、裝置模擬器等,開發工具倒不一定要用Xcode,只要是個原始碼編輯工具就行(vim都行,只是沒Xcode那麼多功能)。
Mac OS
擁有Mac OS環境最簡單的方法是找一臺蘋果電腦,包括iMac, MacBook Pro, MacBook Air, Mac Mini,但不包括蘋果的移動裝置(iPod Touch, iPhone, iPad, iPad Mini,它們執行的是iOS系統,不是Mac OS),蘋果電腦在出廠的時候就會預裝Mac OS,目前最新版本是Mac OS X 10.8,主流的版本還有Mac OS X 10.6、Max OS X 10.7。 如果囊中羞澀,可以借一臺,或者上淘寶買個二手的。
黑蘋果
提到iOS開發入門,似乎沒辦法不說黑蘋果。所謂黑蘋果,就是把Mac OS改造後安裝在非蘋果的硬體上,這是違反DMCA法案的,黑蘋果的更多資料,可以在維基上找到 蘋果電腦價格高,國內軟體開發者生存壓力大,所以黑蘋果在國內也有一些真實的存在,國外當然也有啦。 黑蘋果基本可以勝任iOS開發,但有一些問題:
- 安裝黑蘋果是非法的
- 個人行為蘋果公司一般不會追究,但會遭同行的鄙視
- 黑蘋果超級難裝,挑硬體。即使完全相同的型號,相同的批次,也有可能A機器裝上了,B機器裝不上
- 黑蘋果系統多少都存在一些使用上的問題,像驅動Bug啦、待機恢復藍屏啦、上網瀏覽有問題啦
- 黑蘋果不能隨意升級,可能升級一次safari就導致整個系統崩潰了
上面這些雖然不會直接影響Xcode寫程式碼、模擬器測試,但寫著寫著想上網查個東西的時候,safari不能翻頁,確實挺影響心情的。所以,錢包允許的前提下,還是搞個蘋果電腦省心一些。
Xcode 和 模擬器
Xcode可以在蘋果官網免費下載:Xcode下載地址 安裝Xcode時會自動安裝iOS SDK和模擬器。 這麼強大的IDE居然是免費的,還是挺讓人開心的。
從改一個現成的應用開始吧
學一門新軟體開發技能,能夠第一時間做出一個可執行的產品非常重要,有助於給自己正面激勵,我上大學的時候,有很多次想學一門新語言,往往花了半個月,還沉浸在資料型別和語法字典裡,連第一個Hello World都沒做出來。 這一次,就讓我們從改一個現成的應用開始吧。
下載
首先,我們從蘋果開發者中心下載一個示例程式碼回來。我選了ToolBarSearch。 在本文件的末尾,還有一些其它的網址可以下載開源iOS產品或者程式碼段,但我試了一下,還是Apple Sample Code最容易成功。 下載回來的zip檔案最好儲存在”下載”或者”文稿”目錄裡,因為在Mac OS 10.8以前,有些目錄(例如/var/private/tmp)在Finder中是看不到的,要通過Finder的“前往 > 前往資料夾”功能才能進入。
開啟
有三種方式可以開啟一個iOS Project
雙擊project檔案
開啟Finder,進入剛剛下載解壓的ToolBarSearch目錄,找到ToolBarSearch.Xcodeproj檔案,雙擊之,Xcode會自動啟動,並開啟這個專案
在Xcode裡選擇Project開啟
- 在Xcode沒啟動的情況下(如果Xcode已經啟動了,就先按Command Q退出),啟動Xcode,會彈出“Welcome to Xcode”的歡迎頁,點選左下角的“Open Other”按鈕,找到ToolBarSearch目錄,雙擊ToolBarSearch目錄,或者雙擊ToolBarSearch.Xcodeproj檔案都可以
- 如果Xcode處於開啟狀態,可以點選其選單欄的File -> Open,或者File -> Open Recent,然後再選擇要開啟的專案
通過命令列開啟
在Mac OS 10.8以前,有些目錄(例如/var/private/tmp),在Finder和Xcode的File > Open對話方塊中,點選滑鼠是找不到的,這時候就要通過命令列終端來打開了。 開啟終端,執行:
Objective-C12 | cd/ToolBarSearch的父目錄/ToolBarSearchopen-aXcode |
open -a是mac os的系統命令,除了iOS專案,別的專案也可以這樣開啟。
執行剛下載的應用
點選Xcode左上角的Run按鈕(或者同時按下Comman和R鍵),Xcode會編譯原始碼並在模擬器中執行這個應用。 編譯成功會在螢幕上淡淡地顯示“Build Succeeded”。反之,失敗就顯示“Build Failed”且不啟動模擬器。
修改
在模擬器上看到“Performed search using…”了吧,下面我們改掉它。
- 在Xcode左上角的Run按鈕下方,有一排小按鈕,從左到右第三個是一個放大鏡圖示,滑鼠移上去會顯示“Show the Search Navigator”,點一下它,開啟搜尋介面,在它下方出現的Find輸入框中輸入“performed”
- 搜尋結果只有一條:ToolbarSearchViewController.m,點檔名下方被高亮的“Performed”字串,右側程式碼編輯區會自動開啟這個檔案,並滾動螢幕,使包含“Performed”的這一行出現在編輯區的中間。
- 修改雙引號裡的字串,隨便改成啥,然後按“Command S”儲存。
當然,這些操作,你也可以在終端下通過grep和vim完成。
執行修改後的應用
按Command R執行,看看,是不是看到效果啦? 是的,修改一個應用就這麼簡單。
Objective-C
Objective-C是蘋果應用軟體(包括蘋果電腦上的Mac OS App和移動裝置上的iOS App)的開發語言。它是一種面向物件的程式語言。 蘋果公司還提供了一個軟體,叫Interface Builder,簡稱IB,用於視覺化的介面製作,就像用Dreamweaver做網頁,或者像Visual Basic做桌面軟體一樣。後來IB就整合進了Xcode,成了Xcode的一部分。這篇文件不講IB,只講Objective-C,因為:
- 基本上,每一本講iOS開發的書(紙質書、電子書),都有大量的截圖一步一步教如何用IB開發iOS應用,而講Objective-C開發應用的書卻沒有那麼多。
- IB可以用來直觀方便地畫介面、設定控制元件屬性、建立程式碼與控制元件的聯絡,但後臺的業務邏輯和資料處理仍然要靠Objective-C,可見,不管用不用IB,Objective-C都是繞不過去的。
C的超集
Objective-C擴充套件了ANSI C,是C的超集,也就是說:
- 任何C源程式,不經修改,即可通過Objective-C編譯器成功編譯
- Objective-C源程式中可以直接使用任何C語言程式碼
除了面向物件有語法是SmallTalk風格的(下面會講到),其它非面向物件的語法、資料型別,與C完全相同,所以本文就不再贅述。 來看一個經典的Hello World示例吧:
Objective-C1234567 | #import <Foundation/Foundation.h>intmain(intargc,char*argv[]){@autoreleasepool{NSLog(@"HelloWorld!");}return0;} |
是不是彷彿穿越回了大一學習C語言的時代,看起來和C幾乎沒有區別,是吧?是的,因為還沒用到它的面向物件特性,哈哈!
SmallTalk的訊息傳遞語法風格
Objective-C的面向物件語法源自SmallTalk,訊息傳遞(Message Passing)風格。在原始碼風格方面,這是它與C Family語言(包括C/C++、Java、PHP)差別最大的地方。 在Java、C++世界,我們呼叫一個物件的某方法,在Objective-C裡,這稱作給型別傳送一個訊息,這可不僅僅是文字遊戲,他們的技術細節也是不同的。 在Java裡,物件和方法關係非常嚴格,一個方法必須屬於一個類/物件,否則編譯是要報錯的。而在Objective-C裡,型別和訊息的關係比較鬆散,訊息處理到執行時(runtime)才會動態決定,給型別傳送一個它無法處理的訊息,也只會丟擲一個異常,而不會掛掉。
Objective-C1 | [obj undefinedMethod]; |
在程式碼裡呼叫沒定義的方法(這是Java世界的習慣說法啊,專業的叫法是,給obj物件傳遞它無法處理的訊息),Xcode會警告,但編譯能成功,執行的時候會出錯。它會輸出這樣一個錯誤:
Objective-C1 | Terminatingapp due to uncaught exception'NSInvalidArgumentException', reason: '-[NSObject undefinedMethod]: unrecognized selector sent to instance 0x8871710' |
類似Java的OOP概念
Objective-C中一些面向物件的概念,也可以在Java中找到類似的實現(只能說是類似,不是完全相同),我的讀者基本都是Java和PHP程式設計師,我會在下文中儘量用Java的概念來類比。 GoogleCode上有人整理了Java和Objective-C的概念、資料型別對應表,參見這裡
字串
Objective-C裡有字串是由雙引號包裹,並在引號前加一個@符號,例如:
Objective-C12 | title=@"Hello";if(title==@"hello"){} |
PHP程式設計師要注意,在這裡不能用單引號,即使只有一個字元也不能用。Objective-C與Java、C一樣,雙引號表示字串。
函式呼叫
前文述及,不涉及面向物件時,它和C是完全一樣的。以下是幾個函式呼叫的示例:
不帶引數
Objective-C1 | startedBlock(); |
帶引數
Objective-C12 | NSLog(@"decrypted string:%@",str);CGRectMake(0,0,0,0); |
傳遞訊息給類/例項方法
不帶引數
Objective-C1 | [obj method]; |
對應的Java版本
Objective-C1 | obj.method(); |
帶一個引數:
Objective-C1 | [counter increase:1]; |
對應的Java版本
Objective-C1 | counter.increase(1); |
帶多個引數
對C Family程式設計師來說,這是最難接受的,最反人類的:
Objective-C12 | -(void) setColorToRed:(float)red Green:(float)green Blue:(float)blue{...}//定義方法[myObj setColorToRed:1.0 Green:0.8 Blue:0.2];//呼叫方法 |
對應的Java版
Objective-C12 | public voidsetColorToRedGreenBlue(floatred,floatgreen,floatblue){...}myObj.setColorToRedGreenBlue(1.0,0.8,0.2); |
訊息巢狀
Objective-C1 | UINavigationBar*bar=[[[UINavigationBaralloc] init] autorelease]; |
對應的Java版
Objective-C1 | UINavigationBarbar=UINavigationBar.alloc().init().autorelease();//Java沒有指標,所以星號去掉了 |
類
介面和實現
Objective-C的類分為介面定義和實現兩個部分。介面定義(Interface)放在標頭檔案中,副檔名是.h,實現(implementation)放在實現檔案中,副檔名是.m(也有.mm的副檔名,表示Objective-C和C++混編的程式碼)。 介面定義也可以寫在.m檔案中,但最好不要這麼幹
需要注意的是,與Objective-C的interface概念最接近的是C和C++裡的標頭檔案,它與implementation是成雙成對出現的,作用是宣告類的成員變數和方法。它與Java的interface概念完全不同:
- Objective-C裡,interface有且只有一個實現,Java的interface可以有0-N個實現
- Objective-C裡,interface可以定義成員屬性,Java裡不可以
在Objective-C裡,和Java的Interface概念相似的是Protocol,下文會講到。 請看示例: Interface
Objective-C123456789 | @interfaceMyClass{intmemberVar1;idmemberVar2;}-(return_type)instance_method1;-(return_type) instance_method2:(int)p1;-(return_type) instance_method3:(int)p1 andPar:(int)p2;@end |
Implementation
Objective-C1234567891011121314 | @implementationMyClass{intmemberVar3;}-(return_type)instance_method1{....}-(return_type) instance_method2:(int)p1{....}-(return_type) instance_method3:(int)p1 andPar:(int)p2{....}@end |
介面和實現以@interface、@implementation開頭,都以@end結束。“@”符號在Objective-C中是個很神奇的符號。 冒號也是方法名的一部分,method和method:是兩個不同的方法名,不是overload,第二個帶引數。 上述程式碼對應的Java版:
Objective-C1234567891011121314151617 | public classMyClass{protected intmemberVar1;protected pointer memberVar2;private intmemberVar3;public(return_type)instance_method1(){....}public(return_type)instance_method2(intp1){....}public(return_type)instance_method3andPar(intp1,intp2){....}} |
私有方法和公開方法
寫在.h標頭檔案裡的方法都是公開的,Objective-C裡沒有私有方法的概念(沒有你說個蛋啊,哈哈哈哈)。 官方並沒有提到Objective-C怎麼實現私有方法,我查閱了stackoverflow,統一的答案是,要實現私有方法的效果只能藉助Category,不過,根據我的測試,即使採用了Category,也不能阻止外部的程式碼呼叫這個“私有方法”,只是Xcode不支援“私有方法”的自動完成,並會有警告提示,執行的時候,還是會成功的。各位看官知道有這麼回事就可以了,這裡不深講。
變數和屬性
類方法和例項方法
類方法
類方法就是Java、PHP裡的Static Method,不用例項化就能調。類方法有一個加號字首。 示例: 類定義
相關推薦
iOS開發60分鐘入門
本文面向已有其它語言(如Java,C,PHP,Javascript)程式設計經驗的iOS開發初學者,初衷在於讓我的同事一小時內瞭解如何開始開發iOS App,學習目標包括: 能使用Xcode IDE、模擬器 能修改、除錯已有iOS App 能在已有應用內建立新模組 能建立新應
iOS開發-OpenGL ES入門教程1
貼圖 iba 細節 con osi tutorial name rip tex http://www.jianshu.com/p/750fde1d8b6a 這裏是一篇新手教程,環境是Xcode7+OpenGL ES 2.0,目標寫一個OpenGL ES的hello wor
PyTorch 60 分鐘入門教程:資料並行處理
可選擇:資料並行處理(文末有完整程式碼下載) 作者:Sung Kim 和 Jenny Kang 在這個教程中,我們將學習如何用 DataParallel 來使用多 GPU。 通過 PyTorch 使用多個 GPU 非常簡單。你可以將模型放在一個 GPU: device = torch.
PyTorch 60 分鐘入門教程:PyTorch 深度學習官方入門中文教程
什麼是 PyTorch? PyTorch 是一個基於 Python 的科學計算包,主要定位兩類人群: NumPy 的替代品,可以利用 GPU 的效能進行計算。 深度學習研究平臺擁有足夠的靈活性和速度 開始學習 Tensors (張量)
PyTorch 60 分鐘入門教程
PyTorch 60 分鐘入門教程:PyTorch 深度學習官方入門中文教程 http://pytorchchina.com/2018/06/25/what-is-pytorch/ PyTorch 60 分鐘入門教程:自動微分 http://pytorchchina.com/2018/12/25/autogr
【iOS開發】---- ARC 入門
用他們自己的話說,MusicBrainz 是”一個開放的音樂百科全書, 為公眾提供音樂的元資料”。 他們提供一個免費的 XML web service 來供你的應用呼叫。 如果像更多的瞭解 MusicBrainz, 可以去他們的網站看看 http://musicbrainz.org.
Vue.js——60分鐘快速入門
attribute 否則 style屬性 快速 基於 oid creat get rac Vue.js是當下很火的一個JavaScript MVVM庫,它是以數據驅動和組件化的思想構建的。相比於Angular.js,Vue.js提供了更加簡潔、更易於理解的API,使得我們能
0基礎學IOS開發怎樣入門
主機 咨詢 開源 閱讀 關註 論壇 優勢 難學 c語言 1 、信念。 很大程度上,學iOS就是一個信念的事情。iOS開發本身不難學,不需要你有很高的智力,只需要你能夠堅持下去。只要你心中有信念,堅持下去就會有收獲。不管你是學哪一種編程語言,不用懷疑你能不能學會,只要你肯下工
ios開發之Swift新手入門
間距 cati rmi article ride edit ner .com 設置 1、關於swift和調試,swift在ios7.0才支持,ios8.3系統的真機必需要xcode6.3才幹調試。安裝xcode6.3需要os x 10.10以上 2、應用程序由Main.
Vue.js——60分鐘webpack項目模板快速入門
int oss 文件 次數 mon 即使 sed val 來講 概述 browserify是一個 CommonJS風格的模塊管理和打包工具,上一篇我們簡單地介紹了Vue.js官方基於browserify構築的一套開發模板。webpack提供了和browserify類似的功能
Vue.js——vue-router 60分鐘快速入門
ges 內部使用 note eight 開始 href for ram 加載 概述 vue-router是Vue.js官方的路由插件,它和vue.js是深度集成的,適合用於構建單頁面應用。vue的單頁面應用是基於路由和組件的,路由用於設定訪問路徑,並將路徑和組件映射起來。傳
【PyTorch深度學習60分鐘快速入門 】Part1:PyTorch是什麽?
修改 .com org -c .cn ndarray 兩種 ble 我們 0x00 PyTorch是什麽? PyTorch是一個基於Python的科學計算工具包,它主要面向兩種場景: 用於替代NumPy,可以使用GPU的計算力 一種深度學習研究平臺,可以提供最大的靈活
Python開發——十分鐘快速入門
版權宣告:本文為博主原創文章,未經博主允許不得轉載。原文連結:https://blog.csdn.net/qq_37992321/article/details/83995517 一、瞭解Python 什麼是python? python有什麼特色? 二、在Windows系統下搭建P
IOS開發入門之一——Swift語言基礎
需要iOS視訊資料可以加我微信: 1914532832 驗證資訊請註明:IOS開發 很多新人對IOS開發很迷茫,不知道從何下手?看完本系列,你將會覺得IOS入門其實很簡單。要學習IOS開發,當然是先學習Swift語言,特別是小白,你連基本的程式碼都
敏捷開發:60分鐘掌握敏捷估計和規劃
估計和規劃在軟體開發中是必不可少的活動,那敏捷方式下我們如何做呢?以下是今年5月份內部做的一個培訓PPT,希望對大家有所幫助。 敏捷個人俱樂部QQ群:40961321 加入敏捷個人俱樂部QQ群說明
PyTorch 深度學習:60分鐘快速入門(2) ----Autograd: 自動求導
PyTorch 中所有神經網路的核心是autograd包.我們首先簡單介紹一下這個包,然後訓練我們的第一個神經網路. autograd包為張量上的所有操作提供了自動求導.它是一個執行時定義的框架,這意味著反向傳播是根據你的程式碼如何執行來定義,並且每次迭代可以不同. 接下來我們用一些
PyTorch 深度學習:60分鐘快速入門(1) ----什麼是PyTorch
本文翻譯的版本是pytorch 1.0.0官方文件 譯自 pytorch官方文件 作者:Soumith Chintala 教程目標: 深入理解PyTorch張量庫和神經網路 訓練一個小的神經網路來分類圖片 這個教程假設你熟悉numpy的基本操作。
Sagit.Framework For IOS 開發框架入門教程5:訊息彈窗STMsgBox
前言: 昨天剛寫了一篇IT連創業的文章:IT連創業系列:產品設計之答題模組,(歡迎大夥關注!) 感覺好久沒寫IOS的文章了,今天趁機,來補一篇,Sagit的教程。 今天主要是分享訊息彈窗功能,即STMsgBox的用法: STMsgBox為彈窗相關的功能的原始碼。 1、對外API功能呼叫說明:
Sagit.Framework For IOS 開發框架入門教程6:網路請求STHttp
前言: IOS的文章,今天,再來補一篇,Sagit的教程; 雖然感覺IOS的文章沒什麼觀眾,還是努力寫吧,-_-〜 今天主要是分享網路請求,即STHttp的用法: STHttp為處理網路API請求的功能的原始碼。 1、對外API功能呼叫說明: 對於網路請求,Sagit目前是對AFNetwo
IOS開發UI篇--UICollectionView初步入門
一、UICollectionView的簡介 UICollectionView是IOS 6中引進的列表展現控制元件,用於展示集合檢視,佈局更加靈活,可以高度定製內容的展現,可以有效的進行資料管理,即使對於大量資料,也非常的高效。蘋果官方給出了Demo(點我下載)