日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

iOS开发入门

發布時間:2024/4/17 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 iOS开发入门 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
https://github.com/qinjx/30min_guides/blob/master/ios.md
  • 任何C源程序,不經修改,即可通過Objective-C編譯器成功編譯
  • Objective-C源程序中可以直接使用任何C語言代碼
除了面向對象有語法是SmallTalk風格的(下面會講到),其它非面向對象的語法、數據類型,與C完全相同SmallTalk的消息傳遞語法風格Objective-C的面向對象語法源自SmallTalk,消息傳遞(Message Passing)風格。在源碼風格方面,這是它差別最大的地方。在Java、C++世界,我們調用一個對象的某方法,在Objective-C里,這稱作給類型發送一個消息,這可不僅僅是文字游戲,他們的技術細節也是不同的。在Java里,對象和方法關系非常嚴格,一個方法必須屬于一個類/對象,否則編譯是要報錯的。而在Objective-C里,類型和消息的關系比較松散,消息處理到運行時(runtime)才會動態決定,給類型發送一個它無法處理的消息,也只會拋出一個異常,而不會掛掉。[obj undefinedMethod]; 在代碼里調用沒定義的方法(這是Java世界的習慣說法啊,專業的叫法是,給obj對象傳遞它無法處理的消息),Xcode會警告,但編譯能成功,運行的時候會出錯。它會輸出這樣一個錯誤:Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[NSObject undefinedMethod]: unrecognized selector sent to instance 0x8871710' 字符串Objective-C里有字符串是由雙引號包裹,并在引號前加一個@符號,例如:title = @"Hello"; if(title == @"hello") {} PHP程序員要注意,在這里不能用單引號,即使只有一個字符也不能用。函數調用不涉及面向對象時,它和C是完全一樣的。以下是幾個函數調用的示例:不帶參數startedBlock(); 帶參數NSLog(@"decrypted string: %@", str); CGRectMake(0,0,0,0);傳遞消息給類/實例方法不帶參數[obj method]; 對應的Java版本obj.method(); 帶一個參數:[counter increase:1]; 對應的Java版本counter.increase(1); 帶多個參數對C Family程序員來說,這是最難接受的,最反人類的:- (void) setColorToRed: (float)red Green: (float)green Blue:(float)blue {...} //定義方法 [myObj setColorToRed: 1.0 Green: 0.8 Blue: 0.2]; //調用方法 對應的Java版public void setColorToRedGreenBlue(float red, float green, float blue) {...} myObj.setColorToRedGreenBlue(1.0, 0.8, 0.2); 消息嵌套UINavigationBar *bar = [[[UINavigationBar alloc] init] autorelease]; 對應的Java版UINavigationBar bar = UINavigationBar.alloc().init().autorelease();//Java沒有指針,所以星號去掉了分為接口定義和實現兩個部分。接口定義(Interface)放在頭文件中,文件擴展名是.h,實現(implementation)放在實現文件中,文件擴展名是.m(也有.mm的擴展名,表示Objective-C和C++混編的代碼)。interface可以定義成員屬性,Java里不可以Interface@interface MyClass { int memberVar1; id memberVar2; } -(return_type) instance_method1; -(return_type) instance_method2: (int) p1; -(return_type) instance_method3: (int) p1 andPar: (int) p2; @end Implementation@implementation MyClass { int memberVar3; } -(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版:public class MyClass { protected int memberVar1; protected pointer memberVar2; private int memberVar3; public (return_type) instance_method1() { .... } public (return_type) instance_method2(int p1) { .... } public (return_type) instance_method3andPar(int p1, int p2) { .... } }私有方法和公開方法寫在.h頭文件里的方法都是公開的,Objective-C里沒有私有方法的概念類方法就是Java、PHP里的Static Method,不用實例化就能調。類方法有一個加號前綴。 示例:類定義@interface MyClass +(void) sayHello; @end @implementation MyClass +(void) sayHello { NSLog(@"Hello, World"); } @end 使用[MyClass sayHello];實例方法有一個減號前綴。 示例:類定義@interface MyClass : NSObject -(void) sayHello; @end @implementation MyClass -(void) sayHello { NSLog(@"Hello, World"); } @end 使用mycls = [MyClass new]; [mycls sayHello];繼承是寫在Interface定義里面的。語法為:子類名在左,父類名在右,中間用冒號分隔。 示例:@interface MyClass : NSObject @endselector就是一個方法指針,類似PHP里的動態方法名:<?php class Hello { public function sayHello() {} public function test() { $fun_name = "sayHello"; $this->$fun_name(); } } 在Objective-C里,selector主要用來做兩類事情:綁定控件觸發的動作@implementation DemoViewController - (void)downButtonPressed:(id)sender {//響應“按鈕被按下事件”的方法 UIButton *button = (UIButton*)sender; [button setSelected:YES]; } - (void)drawAnButton { UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom]; btn.frame = _frame; btn.tag = 1; btn.backgroundColor = [UIColor clearColor]; [btn addTarget: self action: @selector(downButtonPressed:) forControlEvents: UIControlEventTouchUpInside];//當這個按鈕被按下時,觸發downButtonPressed:方法 } @end 延時異步執行@implementation ETHotDealViewController - (void)viewDidLoad { //獲取數據源 HotDealDataSource *ds = [[HotDealDataSource alloc]init]; [ds reload]; _items = ds.items; [self performSelector: @selector(refreshTable) withObject: self afterDelay: 0.5];//延遲0.5秒調用refreshTable方法 } -(void)refreshTable { [self.tableView reloadData]; } @end 這個例子中,獲取數據源是通過ASIHTTP組件異步調用服務端HTTP接口,refreshTable要用到數據源返回回來的數據,如果不延遲0.5秒,就會立刻執行,執行的時候數據還在路上呢,頁面就要變空白了。協議(Protocol)就是Java、PHP里的Interface。協議的定義用@protocol關鍵字:@protocol Printable -(void)print:(NSString)str; @end可以繼承別的協議:@protocol Printable <NSObject> -(void)print:(NSString)str; @end協議可以包含可選方法,顧名思義,可選方法可以不被類實現:@protocol Printable @optional -(void)print:(NSString)str; @end 加了@optional關鍵字,一個類在implements這個協議時,便可以不實現print:方法。協議的實現一個類實現某些協議是寫在Interface定義里面的。語法為:協議名用尖括號包裹,多個協議名用逗號隔開,協議寫在父類的右邊(如果沒有父類就直接寫在子類右邊)。示例:@interface class MyClass : NSObject <Printable, Drawable> @end Printable, Drawablw就是兩個協議。對應的Java版本是:public class MyClass extends NSObject implements Printable, Drawable { }分類(Category)分類可以給一個已經存在的類增加方法,而不用去改它的源碼。Java和PHP中都沒有類似的特性。比如說,NSObject是一個Objective-C內置的系統類,我們想給它增加toJson方法,就像這樣:頭文件:NSObject+Json.h@interface NSObject (Json) -(NSString)toJson; @end 實現文件:NSObject+Json.m@implementation NSObject (Json) -(NSString)toJson { //... } @end 使用的時候,只要包含NSObject+Json.h,實例化NSObject類,就可以使用toJson方法了:import "NSObject+Json.h" @implatementation XYZController -(void)test { NSObject *obj = [[NSObject alloc]init]; NSString *str = [obj toJson]; } @end 當然了,NSObject本來的那些方法依然還是可以用的,什么都沒變,只是多了個toJson方法。看起來是不是和繼承沒太多差別呢(除了使用的時候實例化的是NSObject,而不是JsonObject)?再看一個繼承實現不了的例子:頭文件:NSObject+Json+XML.h@interface NSObject (Json) -(NSString)toJson; @end @interface NSObject (XML) -(NSString)toXML; @end 實現文件:NSObject+Json+XML.m@implementation NSObject (Json) -(NSString)toJson { //... } @end @implementation NSObject (XML) -(NSString)toXML { //... } @end 使用:import "NSObject+Json+XML.h" @implatementation XYZController -(void)test { NSObject *obj = [[NSObject alloc]init]; NSString *json = [obj toJson]; NSString *xml = [obj toXML]; } @endCocoa TouchCocoa是Mac OS App的開發框架,Cocoa Touch是iOS開發用的框架,Cocoa Touch和Cocoa大部分是一樣的,只是Cocoa Touch多了一些移動設備特有的東西,如:觸摸屏、加速度傳感器、GPS定位。Cocoa中多任務、多窗口的特性,在Cocoa Touch中也是沒有的(或者跟Cocoa不完全一樣的)。學過Objective-C語言之后,也要再學習Cocoa Touch框架才能順利地開發iOS應用。最常用設計模式之DelegateCocoa Touch大量使用Delegate(委派)設計模式。真機測試擁有一個開發者賬號蘋果的Developer Program分為個人開發者和公司開發者,分別是每年99美元和每年299美元,分別可以注冊100臺和500臺蘋果測試設備。這個臺數限制在一個付費年度內不會清空,比如說,2013年4月1日付費成功的,付費會員資格在2014年3月31日之前有效,這期間,注冊一臺就少一個名額,哪怕這個設備注冊進來用了之后一分鐘馬上又刪掉了,減少的這個名額也不會回來。在交錢之前,最好問一下,周圍的同事,有沒有已經交了錢的。如果有,你只需要注冊一個免費的Apple ID,請他發個邀請郵件給你,把你的Apple ID加入他的團隊就可以了,蘋果會認為你們兩個人是一個團隊的,你們分別用自己的賬號,共享100臺設備的限額,安裝證書和私鑰進證書管理:
  • 進入?蘋果開發者中心
  • 點擊iOS Dev Center
  • 點藍色“Login”按鈕,用你的Apple ID登錄,登錄成功會跳到?開發者首頁
  • 點擊右上角的iOS Provisioning Portal(別找了,直接Command F搜索)
  • 點左側菜單欄里的Certificates
頁面上有一個“Your Certificate”區域,下方有個Download圓角按鈕,這是你的個人證書,下載下來。再下面一行,有一句“If you do not have the WWDR intermediate certificate installed,?click here to download now”,這個是蘋果的公共證書,也下下來。雙擊下載回來的證書,裝證書時,會提示你輸入密碼,這是【鑰匙串訪問工具】在問你要你的Mac OS賬號開機密碼(相當于linux里面的sudo),不是Apple ID的密碼,不要搞錯了。安裝私鑰如果你是和其它同事公用的賬號,讓他給你一個私鑰即可,就是一個擴展名為p12的文件,雙擊之,鑰匙串訪問會自動出來,需要你輸入一個密碼,這個密碼問給你p12文件的人要,不是你的Mac OS系統開機密碼,也不是你的Apple ID密碼。將設備注冊到Provisioning Portal
  • 打開Xcode,從Xcode的Window菜單中找到Organizer,打開之(Shift Command 2)。
  • 把iOS設備連上電腦,Organizer會自動識別出你的設備,并顯示在左側邊欄。
  • 在Organizer左側邊欄找到你的設備,右鍵,點擊“Add Device to Provisioning Portal”,然后等Organizer提示你操作成功即可。(選中設備后,右邊設備詳情區域會顯示一個按鈕“Use for Development”,點它也可以)。
到iOS真機上運行測試版程序回到Xcode主界面,在Stop按鈕(Run按鈕右邊那個黑色正方形按鈕)右邊,有個下拉菜單,顯示著 “ToolBarSearch > iPhone 5.0 Simulator” (即 你的應用英文名 > 當前選中的調試 ),點擊這個下拉菜單,選中你的真機設備名,再按“Run”按鈕,Xcode就會自動把當前正在編輯開發的應用編譯并安裝到真機上測試啦!發布到App Store打IPA包IPA包本質上是一個ZIP壓縮包,只不過它有著特殊的目錄結構,擴展名是ipa,制作方法如下:
  • 在Xcode中Build項目,快捷鍵Command B
  • 在左側項目導航器中,展開Products文件夾,找到你要打包的應用,你的應用名.app,右鍵,選擇show in finder
  • 到Finder中Copy這個.app目錄(選中,按Command C),復制到一個你新建的名為Payload(區分大小寫)的文件夾中
  • 找到你的應用Logo,即一個512 * 512像素的PNG文件,copy到與Payload一起(與Payload并列,不要放進Payload了),并重命名為iTunesArtwork(區分大小寫,沒有擴展名)
  • 將Payload目錄、ItunesArtwork文件打成一個zip包,并更改擴展名為ipa
  • 雙擊這個ipa文件,會用iTunes打開,如果打開成功,且在iTunes里有應用Logo顯示,就成功了
批量自動打包除App Store外,還有許多其它的iOS應用市場(如91助手,同步推等等),如果一個應用需要發布到很多個應用市場,且他們的代碼略有不同(比如說,統計代碼不同),按上述方法手工修改源碼再打包,再還原,比較容易出錯。好消息是,Xcode是有命令行的,我們可以寫一個shell腳本,先用se自動修改源碼,再調用Xcode的命令行來編譯以得到your——app.app目錄,最后調用zip、mv等命令把上一個章節講的ipa打包動作自動執行。Xcode中的代碼結構與操作系統上的文件系統并不一致推薦在Finder里建好目錄再到Xcode的Project Navigator中點擊“Add Files to”添加到項目中開源代碼
  • Apple官方的Sample Code
  • 維基百科上的開源iOS App
  • iOS Opensource?--Domain Parking了,以前可以下載Twitter和Wordpress客戶端的
  • code 4 app
  • UI 4 app, code4app的姐妹站
Objective-C教程
  • Apple官方教程
  • Cocoa Dev Center
  • 維基上的Objective-C語言簡介?--中文,十分鐘可讀完,推薦

總結

以上是生活随笔為你收集整理的iOS开发入门的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。