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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

iOS开发公开课总结

發布時間:2023/12/29 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 iOS开发公开课总结 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?????????????????????????????????????????????????????????????????? iOS開發公開課總結

前言

iphone開發相關的教程中最有名的,當數斯坦福大學發布的”iphone開發公開課”了。此公開課在以前叫做《iphone開發教程》,今年由于平板電腦的流行,所以也加入了ipad開發相關的課程。在網易公開課上,有該教程的2010年錄象,并且前面15集帶中文字幕文件,非常適合初學者學習。

在這里順便說一下,網易公開課上的28集其實并不需要全部看完。真正的課程只有前面12集。后面的課程都是請一些業界的名人講他們成功的app以及學生的作品展示,可看可不看。所以大家不要被28集這么多嚇到。

由于近一年來iOS5以及xcode4的發布,蘋果對原有的開發環境xcode以及開發語言Objective-C都有改進,所以原有的教程中很多內容不再適用了。例如新的xcode4將Interface Builder集成到xcode中,整個IDE布局和快捷鍵完全大變樣,又比如蘋果為Objective-c引用了ARC和Storyboard,這些都使得app的編程方式大為不同。

值得高興的是,斯坦福大學最近更新了該公開課的2011年秋季錄象,免費下載地址是:http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewPodcast?id=480479762,不過現在該公開課還沒有翻譯,只能看英文原版了。新的課程相比以前要短了許多,一共只有9課。我大概快速看了一遍,總結一些心得給大家。

iOS的MVC模式

MVC模式算是客戶端類程序使用的設計模式的標配了。iOS對于Model, View和Controller之間的相互調用有它自己的規范和約定,在公開課的第一課中,就介紹了應該如何將MVC模式應用在iOS開發中。主要的內容就體現在如下這張圖中(圖片來自該公開課第一課的配套pdf的第37頁):

我下面詳細介紹一下這幅圖的意思。

  • 首先圖中綠色的箭頭表示直接引用。直接引用直觀來說,就是說需要包含引用類的申明頭文件和類的實例變量。可以看到,只有Controller中,有對Model和View的直接引用。其中對View的直接引用體現為IBOutlet。

  • 然后我們看View是怎么向Controller通訊的。對于這個,iOS中有3種常見的模式:

  • 設置View對應的Action Target。如設置UIButton的Touch up inside的Action Target。
  • 設置View的delegate,如UIAlertViewDelegate, UIActionSheetDelegate等。
  • 設置View的data source, 如UITableViewDataSource。通過這3種模式,View達到了既能向Controller通訊,又不需要知道具體的Controller是誰是目的,這樣就和Controller解耦了。
  • 最后我們看Model。Model在圖上有一個信號塔類似的圖形,旁邊寫著Notification & KVO。這表明Model主要是通過Notification和KVO來和Controller通訊的。關于Notification,我寫了一個模版代碼片段如下:(關于代碼片段的管理,推薦大家看我寫的另一篇文章:使用Github來管理xcode4中的代碼片段

1 2 3 4 5 6 7 // 監聽通知 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(<#methodName#>) name:kLoginNotification object:nil]; // 取消監聽 [[NSNotificationCenter defaultCenter] removeObserver:self]; // 發送通知 NSDictionary * userInfo = [NSDictionary dictionaryWithObject:[NSNumber numberWithInt:200] forKey:@"code"]; [[NSNotificationCenter defaultCenter] postNotificationName:<#notification_name#> object:self userInfo:userInfo];

所以,對于初學者,要正確地使用MVC模式還是挺難的,回想我們以前做公司某產品iphone版的時候,就有一些Model層直接依賴了Controller層,比如Model層更新數據失敗了,直接調用Controller層顯示出一個失敗的提示界面。這樣層次劃分不清,造成我們做ipad版的時候很痛苦。最后我們做了代碼重構,把Model的相應改變都用Notification來完成,使得在做ipad版開發時輕松了很多。

Convention About synthesize

“Convention over configuration”(約定高于配置)成就了Ruby On Rails,而iOS也有很多編程的約定。這些約定單獨看沒有什么好處,約定的最大好處就是,如果大家都遵守它,那么代碼風格會趨于一致,你會很方便地讀懂或修改別人的代碼。

我們可以從第一課PPT的第50頁看到如下的代碼:

從圖中可以看到,該課程推薦大家在使用synthesize關鍵字時,為property設置一個下劃線前綴。我也看過一些iphone的開源項目,比如facebook開源的 three20 ,它是遵守了這樣的約定的。

其它的約定還包括:

  • 以new, copy, alloc開頭的方法,都應當由調用者來release,而其它方法,都返回一個autorelease對象。
  • 通常iphone頂部的bar應該用UINavigation控件,而底部的bar應該用UIToolbar控件。
  • 所有的UI操作都應該在主線程(UI線程)進行。這個似乎不是約定,但是好多同學不知道,也寫在這兒吧。

UIView

剛開始對界面之間的跳轉很不理解,后來發現其實很簡單,就是一層一層疊起來的View。從View A上點擊一個按鈕跳轉到View B,其實就是把View B“蓋”在View A上面而已。而“蓋”的方式有好多種,通常的方法有2種:

一. 用UINavigationController把View B push進來。

1 [self.navigationController pushViewController:nextView animated:YES];

二. 用presentModalViewController方法把View B蓋在上面。

1 [self presentModalViewController:nextView animated:YES];

除此之外,其實還有一種山寨方法,即把View A和View B都用addSubView加到AppDelegate類的self.window上。然后就可以調用 bringSubviewToFront 把 View B顯示出來了,如下所示:

1 2 3 4 5 // AppDelegate.m類 [self.window addSubview:viewB]; [self.window addSubview:viewA]; // 在需要時調用 [self.window bringSubviewToFront:viewB];

上面說的是界面之間的跳轉。對于一個界面內,其控件的布局其實也是一個一個疊起來的,之所以說疊,是指如果2個控件如果有重疊部分,那么處于上面的那個控件會蓋住下面的。

Nib File

Nib文件實際上內部格式是XML,而它本身并不編譯成任何二進制代碼。所以你如果用iFile之類的軟件在iPhone上查看一些安裝好的軟件的目錄,可以看到很多的以nib結尾的文件,這些就是該軟件的界面文件。雖然這些XML經過了一些壓縮轉換,但是我們還是可以看到一些信息,例如它使用了哪些系統控件等。

Nib文件剛開始給我的感覺很神秘,后來發現它其實就是用于可視化的編輯View類用的。其中的 File’s Owner一欄,用于表示這個View對應的Controller類。通常情況下,Controller類會有一個名為view的變量,指向這個view的實例,我們也可以建立多個IBOutlet變量,指向這個view上的控件,以便做一些界面上的控制。

在Interface Builder上還有一個好處,是可以方便的將View的事件與Controller的IBAction綁定。只需要按住Ctrl鍵,從控件往File’s Owner一欄拖拽,即可看到可以綁定的方法列表。其實這些只是簡化了我們的工作,如果完全拋開Interface Builder,我們一樣可以完成這些工作。我所知道業界的一些iOS開發部門,為了多人協作更加方便,更是強制不允許使用Interface Builder,一切界面工作都在代碼中完成。如果你用文本編輯器打開Nib文件看過,就能理解這樣做是有道理的。因為如果2個同時編輯一個界面文件,那么沖突的可能性是100%,而且,從svn結出的沖突信息上看,你根本無法修正它。下面的代碼演示了如何不用Interface Builder來添加控件以及綁定UI事件。

1 2 3 4 5 6 7 8 9 10 11 // SampleViewController.m的viewDidLoad方法片段 // 添加Table View控件 UITableView * tableView = [[UITableView alloc] initWithFrame:CGRectMake(0, 0, 320, 400)]; [self.view addSubview:tableView]; tableView.delegate = self; [tableView release]; // 添加Button控件 self.button = [[[UIButton alloc] initWithFrame:CGRectMake(0, 0, 200, 100)] autorelease]; [self.view addSubview:self.button]; // 綁定事件 [self.button addTarget:self action:@selector(buttonPressed) forControlEvents:(UIControlEventTouchUpInside)];

總結

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

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