我的吐糟,不喜勿噴!!!--------------------------------------------------------------
ios
不推薦購買該書中文版,做爲純粹的工具書來講,它已通過時了。 web
做爲啓蒙教材來講,書上面處處都是錯誤,你沒看錯,就是錯誤。容易誤導初學者。 算法
做爲進階教程來講,它裏面沒有任何進階的東西,固然若是你想來個xcode幾日遊,能夠買來看看。 xcode
總之,到網上下個英文電子版就差很少了,不值得花這80+來塊錢,雖然就是吃餐飯的錢。 瀏覽器
---------------------------------------------------------------------------------------- 服務器
照樣寫在開頭。網上的各類書籍眼花繚亂,各位大神的推薦也是五花八門,有一個迷戀算法追求完美作ios應用的資深果粉(Y)給我推薦了這本書,TA是個很奇特的人,各類婆媽各類囉嗦,可是給我講起算法仍是很是通俗易懂,很快就勾起我對大學裏面薄弱的專業知識的回憶並加深了理解。關於ios開發,也聽TA嘮叨了一些,不過這傢伙老是會不當心遺忘我是剛剛纔開始學習的菜鳥,因而乎,我只能淡定地無視TA的各類嘮叨說教加嘲笑。
app
好吧,TA說這本書好評不少也很簡單等等。說白了,就是很適合初學者過一遍。好吧,具體怎樣我也不知道,不過我仍是很感謝這個婆媽的人。不過我偶爾會小小懷疑,我會學這個就是由於去年跟TA合做某個項目時被TA荼毒和感染的。
框架
我要吐糟:請問翻譯者,您是把原書丟到google翻譯裏面直接翻譯出來的嗎?唉,多好的書啊,不能給翻糟蹋了啊。真是讓我又愛又恨啊。
iphone
----------------------------------------------------------------------------------- 工具
建項目中會遇到的問題:
若是非得按照書中徹底同樣的走,那確定是走不通的,書是按iphone4來的,如今iphone5S都要出來了,而Xcode的版本也不同了。
譬如,想建立單視圖項目,如今對象的項目類型是:single view application。而默認生成的項目文件也沒有書中所說的兩個xib文件,除非在建立時,去掉 「use storyboards」 前的勾。對於書中反覆提到的手動管理內存,則須要在建立項目時,去掉 「use automatic reference counting」前的勾。還有些零零碎碎的就不寫了,囉嗦這麼多隻是給本身一個提醒「書仍是得比對着看」,只看一本兩本容易被誤導。
interface builder快捷鍵:
按住commond鍵,鼠標移動到button左上角/右下角,拖動鼠標,控件幾何中心不變,大小按比例縮放。
雜七雜八的英文單詞:(待補充)
-----------------------------------------------------------------------------------
在我徹底不認識xcode的時候,就已經熟悉了ipad模擬器,不過當時都是Y手把手幫我把一切都搞定包括phonegap框架的搭建以後,我直接進行web應用開發。不囉嗦了,菜鳥就應該有菜鳥的姿態。
因此,難怪別人說作ios開發硬件成本高,好吧,我如今就缺個iphone了。不過我仍是不後悔去年選擇了note2而不是iphone5,^_^。。。攢錢中。
MVC:模型-視圖-視圖控制器
VC:視圖-視圖控制器
IB:interface builder的縮寫
IBOutlets:對UI對象的引用,代碼經過IBouterlet對UI進行修改,如,設置文本框的內容、改變顏色等。
IBActions:綁定到事件上的方法,當事件被觸發時響應
xib是nib的二進制編碼文件。不過,在最新的xcode中,建立項目時,若是用默認的選項,將不會生成xib文件。
MainWindow.xib :根視圖。在最新Xcode中,已經不存在這個xib文件。(待研究)
關於該根視圖的聲明週期問題,見P54-P55,mark!
前綴:c:類(class);pr:protocol(協議)
以UIPickerView 類爲例,該空間的文件全部者須要實現的協議有 UIPickerViewDataSource 和 UIPickerViewDelegate
http://developer.apple.com/ios
HIG將應用程序分爲三種主要類型(經常使用於iphone的開發):
上述分類爲對書中內容的總結概括,正確性和準確性有待進一步考證,等這本書結束後會去看HIG的。到時候會回頭擴充和修改。吐槽下,這本書翻譯者的中文語法真讓我感到汗顏,各類不通順啊,唉,還好裏面有大量的圖解和代碼,文字很少。不然我真要崩潰了。不過鑑於本身英語弱而時間緊急,仍是很感謝翻譯者的。
書上提到的給addButton添加action的方法已通過時,由於ios自動生成的MasterView中,已經內置了該按鈕,並綁定了對應的方法到該按鈕上。
下面是主視圖.m文件中的兩端代碼:(我感謝這本書,教會了我如何調試ios程序。。。)
- (void)viewDidLoad { [super viewDidLoad]; // new code NSString *path = [[NSBundle mainBundle] pathForResource:@"DrinkDirections" ofType:@"plist"]; _drinks = [[NSMutableArray alloc] initWithContentsOfFile:path]; // Do any additional setup after loading the view, typically from a nib. self.navigationItem.leftBarButtonItem = self.editButtonItem; // 此處即便按鈕的聲明,注意,其中的 insertNewObject 就是點擊addButton以後執行的方法 UIBarButtonItem *addButton = [[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:self action:@selector(insertNewObject:)] autorelease]; self.navigationItem.rightBarButtonItem = addButton; }
// 主視圖.m文件中的insertNewObject。被註釋掉的是默認生成的代碼,後面的打印是個人測試代碼 - (void)insertNewObject:(id)sender { // NSManagedObjectContext *context = [self.fetchedResultsController managedObjectContext]; // NSEntityDescription *entity = [[self.fetchedResultsController fetchRequest] entity]; // NSManagedObject *newManagedObject = [NSEntityDescription insertNewObjectForEntityForName:[entity name] inManagedObjectContext:context]; // // // If appropriate, configure the new managed object. // // Normally you should use accessor methods, but using KVC here avoids the need to add a custom class to the template. // [newManagedObject setValue:[NSDate date] forKey:@"timeStamp"]; // // // Save the context. // NSError *error = nil; // if (![context save:&error]) { // // Replace this implementation with code to handle the error appropriately. // // abort() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development. // NSLog(@"Unresolved error %@, %@", error, [error userInfo]); // abort(); // } NSLog(@"insertNewObject"); }
P236提到,經過添加一個模式視圖來吸引用戶的注意力,該視圖會從底部向上滑入,該視圖能夠在不須要時關閉。該視圖不會被push到視圖的堆棧中。即,用戶不會經過返回按鈕回到該視圖。
Undefined symbols for architecture i386:這種錯誤通常是你用模擬器做爲目標,但編譯的時候找不到相關的庫文件,須要作的就是把庫文件所在的位置添加到library search path中。其它緣由可參考下面網址:http://stackoverflow.com/questions/6984368/undefined-symbols-for-architecture-i386-objc-class-skpsmtpmessage-refere 還有另一個:http://stackoverflow.com/questions/6610709/undefined-symbols-for-architecture-i386
說明:上面的答案是在網上搜的,後面的地址還沒時間去仔細研究不過經檢查,就是我在import文件時,不當心引用了一個被刪掉的.h頭文件。唉,拼寫錯誤害死人。沒想到,我又被本身坑了。
選中全部UI控件,使之高亮顯示,在選擇(頂部)文件面板中「Editor>Embed in>Scroll View」,便可將制定ui控件快速包裝到 UIScollView 中。
關於引用計數的問題,默認不增長引用計數。若是不加retain,會出錯,以下詳細描述。
下面是在主視圖控制器中,插入一個新的模式視圖,插入時,會爲模式視圖中的drinkArray添加到主視圖drinks的引用。(唉,好難說清楚,の,只求本身明白吧,記住了!!!)
- (void)insertNewObject:(id)sender { MSCAddDrinkViewController *addDrinkViewController = [[MSCAddDrinkViewController alloc] initWithNibName:@"MSCDetailViewController" bundle:nil]; // 若是此處的引用爲弱(默認)引用,則模式視圖執行【_drinkArray release】時將致使self.drinks指向的內存被釋放;若是再次開啓模式視圖,並執行【_drinkArray release】,將會出錯,由於此時指向的內存地址已經被釋放過了: addDrinkViewController.drinkArray = self.drinks; // NSLog(@"%@",addDrinkViewController.drinkArray); [self presentViewController:addDrinkViewController animated:YES completion:nil]; [addDrinkViewController release]; }
書上把取消後臺註冊的代碼放在viewDidunload中,可是在ios6+中,這個方法已經被移除掉了,我想了想,把這塊的代碼放在了viewWillDisappear中。
根據書上的說法(298p),の,翻譯很爛不過我想起碼原意不會錯吧,第四段問答最後一段。提到,viewWillDisappear(主視圖中的)會在顯示詳細信息(即顯示新視圖)以前被當即調用,因此當咱們在新增長的列表的詳情頁,直接點擊home鍵退出時,將致使新增的數據丟失。好吧,編譯以後正常運行,沒有什麼異常。so,書上的說法值得商榷。
viewDidLoad(手動管理內存時會用到,主要用來釋放和清空視圖)
viewDidUnload(已經被移除)
viewWillAppear(即將進入)
viewDidAppear(徹底進入)
viewWillDisappear(即將離開)
viewDidDisappear(徹底離開)
在寫JS的時候,徹底不用考慮這個問題,由於瀏覽器即便在後臺運行,頁面中存在的定時器等也會持續跑,因此,w3c纔會引進頁面狀態這個屬性(純屬我的猜想,哈哈)。即便是作web富應用開發,通常要在意的可能只是DOM元素與用戶的交互狀態,或者根據交互加載等狀態來判斷是否與服務器進行數據請求等等,基本上不存在「應用進入後臺」的概念。(至於之後會不會出現,我不知道)說白了,就是,不care硬件和系統,徹底100%依賴瀏覽器!!!!!!
通過幾番探索和請教,我大體明白,程序進入後臺是個什麼概念。對IOS應用來講,進入後臺以後應用將再也不運行,可是能夠爲「程序進入後臺」這一事件---添加事件監聽器(好吧,這是JS的術語)。這樣,當「程序進入後臺」後,會執行指定的方法。譬如,開發一個音樂播放或者有下載功能的應用,就會用到。
唉,說的不清不楚,汗顏!
iphone4+:使用retina屏幕,分辨率爲640*960,對角線尺寸爲3.5英寸。
ipad:屏幕分辨率是1024*768,ipad2+爲高精度,精度爲2048*1536
------------------------------------------------------------------------------------