序)閑扯幾句
很早就想入手ios開發,但是一直沒有機會,個人沒有水果機器,上個公司上班的那台mac mini雖然就在我身邊,灰都有一層了,但是一直沒有機會開機學習下,因為事多,自上一篇文章后,離職后,新公司給配備了mac pro,正好滿足了自己都心願,開始水果軟件開發。自己也是從0開始,學習它不過就這3-4天而已,但是之前對oc還是有些了解,因此憑着android的感覺去做,移動端嘛,不都是布局上丟組件,我相信也有人如果從android走到ios也會有這樣的思想吧,我的思路是:
- 先翻翻ios的結構
- 布局一個view,如何布局並且操縱布局中的對象
- 基本的button,listview,gridview等等所有的組建的使用
- view跳轉傳值
- sqlite操作
- 網絡操作
- 本地文件操作
- 內存管理
到這里基本來說就可以做一些簡單的應用了,最好的方式就是趕緊加入一個ios項目組,接下來的東西就是深入了,對於有android的開發經驗來說,走到ios開發去不是很難,可能難的地方是對oc的理解,我也不得不說oc的語法對於用慣了java/c+的人來說確實很奇葩,就像做php的熱突然看見erlang一樣。
准備)oc基礎,從面向對象起步
關於oc的語法http://www.cnblogs.com/lm3515/archive/2010/12/20/1911135.html這個朋友總結的很好,看完這個基本就能開始了。
一)HelloWorld
任何語言都是從它起步,不解釋,當我拿到水果機的第一件事是干嘛?打開xcode趕緊創建一個ios的helloworld。
看到上面的目錄結構,相信做過cocos的朋友看起來是不是有點熟悉?其實它的運行流程都和cocos差不多。
ios里面文件的后綴:
.h:和c一樣,頭文件
.m:message的縮寫,也就是oc對h文件對實現
.mm:如果我們的一個文件里面即有c++代碼,也有oc代碼,就將它命名為.mm后綴,編譯器會分別處理oc和c+代碼。
.xib:以前叫nib,nib是直接編譯成二進制,xib是xml文件,也就是布局文件,就是android里面的layout_xxx.xml。項目里面由一個LunachScreen的xib文件,它就是ios在剛剛啟動的時候顯示的東西,如果你的應用啟動快,它就是一閃而過,啟動慢可能會顯示久點,相當於loading。
二)流程
ios的入口函數是main.m文件,里面
一個項目項目結構圖如上所示,看到這個結構,我們很關心它的流程是怎樣,ios里面它的入口是main.m文件,在main里面聲明了代理類的運行:
#import <UIKit/UIKit.h> #import "AppDelegate.h" int main(int argc, char * argv[]) { @autoreleasepool { return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); } }
這里我們看到由main啟動了appdelegate這個代理類,在這個代理類里面我們可以設置ios默認啟動哪個試圖作為第一個顯示試圖,如下所示:
#import "AppDelegate.h" #import "ViewController.h" @interface AppDelegate () @end @implementation AppDelegate - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { _window=[[UIWindow alloc]initWithFrame:[UIScreen mainScreen].bounds]; ViewController *friendController=[[ViewController alloc]init]; UINavigationController *navigationController=[[UINavigationController alloc]initWithRootViewController:friendController]; _window.rootViewController=navigationController;
[_window makeKeyAndVisible]; return YES; } - (void)applicationWillResignActive:(UIApplication *)application { } - (void)applicationDidEnterBackground:(UIApplication *)application { } - (void)applicationWillEnterForeground:(UIApplication *)application { } - (void)applicationDidBecomeActive:(UIApplication *)application { } - (void)applicationWillTerminate:(UIApplication *)application { } @end
在這里我們設置了默認顯示的第一個視圖為:ViewController,並且我們設置了一個東西:
_window.rootViewController=navigationController;
這個我們可以理解為android的Context,有了這個我們就可以全局控制管理view,最開始我沒有設置這個,所以view頁面跳轉老是跳轉不過去,並且官方也推薦使用這種方式而不是直接在view中跳轉。
三)view
現在我們來到了ViewController,它就是android中的activity,activity繼承至Activity,而ios中它繼承UIViewController,因此在這里就可以操作這個頁面的視圖,而View的跳轉也就是我們android里面activity的跳轉。
它的跳轉方式如下:
LoginViewController *ickImageViewController = [[LoginViewController alloc] init]; [self.navigationController pushViewController: ickImageViewController animated:true];
就是push和pop view的方式,通過我們前面定義的根view。
四)布局
ios的布局可比android舒服多了,因為屏幕少啊,再多也沒android多吧,在ios里面布局分為三種:
- 代碼:代碼布局就是不是用xib文件,直接代碼創建button之類的,這個在ios里面是可行的,因為ios項目組開發中,美工在效果圖的時候,還會給出組建的xy坐標位置,並且代碼可復用程度較高。
- xib:xib就是前面將的,和android一個activity對應一個布局xml一樣,一個ios的view對應一個xib,但是不得不說的是ios里面的拖拉拽比android里面的窮矮挫舒服多了,效果好很多很多。
- Storyboard:這個東西是新生兒,統一了上面兩種方式,它管理的所有view的布局。
五)結尾
好吧,這兩天后能夠使用3種布局創建一些界面,然后在上面丟一些組件,操作下本地數據庫,網絡下載點東西,之前我一直做服務器,也在andrid下搞xmpp,正好ios下也練手。
至於對於ios的深入分析了解,還真不是一天兩天能學出來的,能做和懂是兩碼事了,后者最好是和別人學習。
寫的有些隨意和雜。