ios開發指南-第1-3章

來源:互聯網
上載者:User

前言:

學完了底層c,c++之後,現在開始重新回頭進行上層的介面設計。既然做了就要做好,就如同過去c,c++做的一樣。過去的一年的時間精看了深入淺出mfc,C++程式設計語言,effective-c++,GOF和大話設計模式,粗看了more effective c++, c++ premier,linux程式設計,harly guide linux, 自覺在c++方面的戰果還算不錯,現在重新撿起剛從事半年多的ios,一方面是因為money,另一方面是因為過去確實底層能力不行,對於介面處於知其然而不知其所以然的狀態,現在重新看起,書籍一定是必需品了。買了兩本書,ios開發指南和ios設計模式解析。這一段部落客要記錄書籍的學習過程,還有過去的未竟的任務,將好的思想,好的策略濃縮一下便於為我所用。

ios開發指南

國人寫的書,一直對國人的技術書籍有種抵觸情緒,不過看這本書的目錄結構比較適合我,於是放棄了精通ios開發那本而選擇了這本。這本書有點太厚了,接近700頁,拿在手上不適合,太重,講的東西多,但是不算雜,各項均有涉及,有個別錯誤,內容不算高深,適合我這樣的小半桶水看。ios設計模式解析是沒有時間看了,先讓它睡著吧,把基本的撿起來以便於自己好迅速的上手公司的代碼,要不然以後工作有我受的了。

第一章

xcode簡介,書籍圖片,內容介紹,書中源碼連結。沒啥有太大意義的內容。

第二章

應用程式的生命週期值得讀一讀。

開啟程式: Not Run (applicationDidFinishLauch) -> InActive (ApplicationDidBecomeActive)-> Active

程式後台: Active (applicationWillResignActive) -> InActive -> Backgroud (applicationDidEnterBackgroud)-> Suspend (applciationWillTerminate) -> Terminate

掛起運行: Suspend -> Backgroud (applciationWillEnterForgroud) -> InActive (applicationWillBecomeActive) -> Active

當系統記憶體不足的時候,背景Suspend程式有可能會被系統kill掉,沒有通知。


視圖的生命週期

loadView(得到一個view) -> ViewDidLoad(在產生的view後添加subview以進行自我的定製) -> ViewWillAppear -> viewWillDisappear -> didReceiveMemoryWarnning (收到記憶體警告) -> viewDidUnLoad

loadView是為了建立self.view,當從nib檔案中去載入就會直接建立self.view,因此loadView也就不需要了。


Xcode的project和target

一個project對應這多個target,project的設定是公用的,target的設定可以覆蓋project的設定。在target的summary選項下,設定螢幕表徵圖57*57, Icon.png,retina螢幕為Icon@2x.png, 啟動螢幕為320*480,Default.png或者retina螢幕為Default@2x.png, 裝置支援選項。


ios Api簡介

架構太多,不容易記憶,再說必要性不是很大。注意大的有四個層次: Cocoa Touch, Media, Core Services, Core OS。具體的每一個層次包含什麼,暫時不關心。還有如何使用協助文檔,alt+滑鼠點擊-》開啟協助文檔


第三章 基本的設計模式

ios常用設計模式,這個我比較擅長,相對就簡單多了。

單例模式

沒有使用synchronized機制,使用gcd的一種dispatch_once機制來維護僅僅執行一次的操作,比加鎖效率高一些,至於內部原理,暫時不懂,不過以後會搞定它的底層的。來個簡單程式碼範例便於以後copy

@interface Singleton : NSObject

@end

@implementation Singleton

static Singleton *_shareSingleton = nil;

+ (Singleton*) sharedManager

{

static dispatch_once_t once;

dispatch_once(&once, ^{

_shareSingleton = [[Singleton alloc]init];

//...... your other initial code here

}

);

return _shareSingleton;

}

思想很簡單,私人靜態指標,類方法中分配記憶體並返回這個指標。為了防止多線程同時訪問可能會建立幾個對象,可以採用加鎖,為了提高效率,有一種二次探測的策略;這裡採用的GCD的內容保證只執行一次。

樣本: UIAccelerometer NSUserDefault NSNotificationCenter等等。


委託模式

我比較撓頭的一種模式,說起來就是我定義了一個架構,但是又想給使用者以個人化的操作,於是將個人化的操作提取出來,製作成協議,讓客戶去實現協議。舉個UITableView的例子, ViewController實現UITableViewDelegate協議, viewController持有一個UItableView的指標,設定tableView.delegate = self。這樣tableView相當於將個人化的操縱留給了ViewController去完成了。

簡單類圖:

UITableViewDelegate

|

|

UITableView (持有delegate指標)------------->MyViewController(持有tableView指標,並設定delegate)


MyViewController繼承delegate同時持有tableView的指標,這個是一個強引用。UITableView也持有一個delegate指標,由於這個指標最終要賦值為MyViewController對象,因此為了避免循環參考,一定是一個弱引用。一般是在MyViewControlller中設定tableView.delegate為自身,也就是說MyViewController負責實現delegate方法。這樣UITableView自身實現了TableView的基本架構,同時將使用者的個人化的可擴充的地方弄成協議供客戶實現。協議的調用肯定是UITableView內部架構去做的,它需要資料的時候就去協議要資料,協議呢給使用者以最大的擴充性,同時使用者有不用關心UITableView具體的內部是如何呈現了,使用者只需要提供資料就行了。樣本 UITextField Application


觀察者模式

相當簡單的一種設計模式,但是又相當常用。一定要記住一個Subject,n多個Observer。Subject需要實現addObserver,removeObserver,notifyAllObservers的方法,同時有一個observers數組儲存所有的observer;observer需要實現update方法。當需要更新資料的時候,調用notifyAllObservers方法,這個方法中遍曆數組的所有observer,調用observer的update方法去更新資料。通知中樞就是一個subject,為了方便使用它以單例模式實現的,後面有空要實現一個通知中樞,讓自己理解更深刻一些。

KVO也是一種觀察者模式,KVO會自動給Subject類建立一個子類,然後將Subject類的isa指標指向衍生類別.在衍生類別內部添加通知觀察者的代碼,需要使用setValueForKeypath的方式,因為這種方式的衍生類別內部才添加了notifyObserver的方法。添加屬性觀察的Subject需要調用addObserver方法來添加觀察者,當屬性改變,觀察者的ObserverForKeyPath會唄調用。這個有空也實現一個,應該不算複雜,主要是內部機制自己理解還不是很透徹。


MVC模式

Cocoa中的MVC的模型和視圖沒有任何互動,全是通過中間人ViewController互動的。

ViewController持有很多View的對象指標(IBOutlet),因此可以直接操縱view,view可以通過委託和協議的機制將操作反饋給ViewController,還有button的回調(IBAction)也可以反饋到Controller。

Controller也一般持有model的指標,可以直接更新model資料;model資料可以使用Notification和KVO機制將model的更改通知給Controller。上面的這幾個策略基本上概括了整個MVC的東西,斯坦福公開課有一個圖片很好,大家值得一看。


OK,就到這裡吧,得回家了,太晚了,明天繼續寫。




聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.