精通iOS開發

第1章 歡迎來到iOS和Swift世界

  • 用戶按下Home鍵,iOS就會返回主屏 幕,應用必須儘快保存一切內容並退出。如果沒有在5秒之內保存必要的數據並放棄對系統資源的控制,無論是否已經完全保存,應用程序進程都會被終止。
  • Cocoa Touch缺少Cocoa的一些特性,但iOS SDK中也有一些功能是Cocoa目前沒有的;比如iOS運動傳感器

第2章 創建第一個項目

  • xcode採用LLVM(low level Virtual Machine,底層虛擬機)編譯器
  • stroyboard 由一組或多組相對於的視圖和控制器構成。
  • iOS Simulator -> Reset Content and Setting...清除模擬器上運行過的應用
  • 啓動界面在APP加載內存的時候可以設置啓動文件,View->屬性檢查器

第3章 實現基本交互

  • MVC:模型(應用數據)、視圖(窗口控件)、控制器(模型和視圖綁定的代碼)
  • 輸出接口 outlet
  • 現在的xcode都已經默認啓動ARC,(ARC 只適用OC的對象和結構體,不能用於Core Foundation對象和C語言的內存分配)
  • stroyboard->view->Label->添加佈局約束

第4章 更豐富的用戶界面

  • 調整圖片和視圖大小一致:Command+=
  • Interface Builder中藍色實線表示佈局約束(不是引導藍色虛線),橙色實線控件與背景視圖的位置關係;
  • Interface Builder中調整視圖大小是按Option顯示輔助線方便調整視圖大小
  • Alpha透明屬性(0-1):0.0完全透明,1.0完全不透明
  • Drawing.Tint屬性視圖下方是否需要繪製內容,默認選中會優化當前視圖的繪製
  • Clears Graphics Context 繪製視圖前是否繪製黑色透明覆蓋對象所有區域(默認不選)
  • Clip Subviews 視圖與子視圖大小不一致時邊界顯示覆蓋控制(默認關閉)
  • Autoresize Subviews視圖大小變化時自動調整子視圖(默認選中)
  • Stretching矩陣視圖大小重繪才拉昇
  • 選中所有視圖對象,Editor -> Resolve AutoLayout Issues -> Add Missing Constraints,設置約束(默認約束以邊緣靠近原則編譯時自動創建)
  • stroyboard中選擇文本框,按Option+Command+6打開連接檢查器,選擇操作方法拖動到視圖上方的ViewControl
  • Touch Up Inside(按鈕控件)和Touch Down(背景按鍵)區別在於是否關心按下動作離開位置
  • 添加新增控件約束並更新Editor -> Resolve Auto Layout Issues -> Add Missing Constraints 和Update Constraints
  • 方法與接口關聯:Ctrl+左鍵拖動(右鍵拖動)到代碼中
  • Interface Builder中按Option拖動對象創建對象副本
  • 視圖中限制位置後(Editor -> Align -> Horizontal Center in Container),還需要右鍵調整視圖位置留出間距(背景轉藍色位置),釋放後菜單選擇Top Space to Top Layout Guide(垂直方向)以固定控件與視圖頂間距
  • 右鍵拖動控件到左上角,是否鼠標,再Shift跳出菜單選擇Leading Space to Container Margin(水平方向+間距) 和 Top Space to Top Layout Guide,完成添加約束
  • 按鈕切片:Show Slicing按鈕後,進行水平和垂直的拉昇

第5章 自動旋轉和自動調整大小

  • 自適應佈局,尺寸分類可以實現在選擇前後的不同佈局

第6章 多視圖應用

  • 導航欄、標籤欄(工具欄)
  • 多視圖情況下一般當前不顯示視圖延遲加載、已加載的不顯示視圖在內存不足情況下釋放


第7章 分頁欄與選取器

  • 分頁視圖控制器UITabBarController
  • 選取器如UIDatePicker(日期選擇器)、UIPickerView(可自定義選擇項)

第8章 表視圖簡介

  • 表視圖是向用戶顯示數據列表的一種常用方式;
  • 表視圖(UITableView)只能一列,不限制行數(每行一個UITableViewCell實例)
  • 表視圖單元格在界面滾動的時候cell重用
  • 通過UITableViewDelegate定義TableView協議
  • 定製表視圖單元:1、向表示圖單元添加子視圖;2、從nib文件中加載單元;3、從stroryboard中加載單元;
  • 視圖調試器:可以對正在運行的APP拍下視圖層級關係的快照(調試的時候Debug->View Debugging->Capture View Hierarchy),再用來在編輯器中檢查

第9章 導航控制器和表視圖

  • 先實現導航控制器和根視圖控制器,再爲層級結構添加更多的控制器和層;實現表視圖與子視圖的切換表視圖與內容視圖切換(詳細內容的編輯)、表視圖拆分多個分區、編輯模式下的刪除、排序
  • 導航控制器 UITableViewController和視圖控制器UITableViewController
  • 轉場(seuge),一種過度,在兩個試圖控制器之間的相連的轉場;轉場也有identifier,表示控制不同控制器過度時的代碼邏輯。

第10章 集合視圖

  • UICollectionView用於展示集合視圖,佈局更加靈活,可實現多列布局
  • 自定義單元格用UICollectionViewController替換默認的UIViewController
  • 使用UICollectionView 必須實現UICollectionViewDataSource,UICollectionViewDelegate,UICollectionViewDelegateFlowLayout這三個協議

第11章 分割視圖和浮動窗口

  • 分割視圖master-detail應用程序:MasterViewControl、DetailViewControl
  • nib文件是靜態對象圖,應用加載時包含對象會全部加載並一直存在;而stroyboard中包含多個場景,可以一部分;
  • 浮動窗口UIPopoverController(只會自行顯示並消失)
  • 避免保留連環(retain cycle)的方式其中一個定義成weak(不對對象擁有所有權)

第12章 應用設置和用戶默認設置
  • 選擇*.plist中的節點右鍵選中Show Raw Keys/Values,再進行字典字段編輯
  • NSNotificationCenter通知,註冊觀察者對某個事件,用於配置的更改實時生效;通知是對象之間通信的輕量級機制

第13章 數據持久化基礎知識

  • 持久化機制常見方法:屬性列表、對象歸檔、嵌入SQLite3、Core Data
  • 應用沙盒:Documents、Library、tmp
  • Core Data 是數據持久化存儲的最佳方式
  • Core Data 在複雜應用中,可以顯著減少設計和編寫數據模型所需要的時間

第14章 文檔和iCloud



第15章 Grand Central Dispatch和後臺處理

  • GCD通過將高代價任務推遲執行並調至後臺運行的方式來提升App的交互速度
  • GCD提供比鎖與多線程更簡單的併發模型,以此來避免一些由併發引起的Bug
  • UIActivityIndicatorView 提供輕型視圖,會顯示一個標準的旋轉進度輪,start的時候可以吸附在當前視圖中,stop的時候就會移除
  • 代碼塊(也就是閉包、lanbda);代碼塊外部變量需要__block 聲明,纔可以在代碼塊內部修改外部也生效
  • 後臺線程不可以向前臺GUI對象發送消息,需要傳給主線程處理,在dispatch_async(dispatch_get_global_queue(),代碼塊中    dispatch_async(dispatch_get_main_queue(),^{...處理GUI對象...})。。。 )
  • dispatch_group_async(group, queue, ^{A}),線程組中併發執行的代碼塊
  • dispatch_group_notify(group, queue, ^{Z}),線程組中代碼塊(A\B\C)都執行完畢後,才執行的代碼塊(Z)
  • NSLog(@"%@", NSStringFromSelector(_cmd));,打印當前函數名,_cmd始終放回當前方法的選擇器
  • 程序狀態說明:未運行;活躍(屏幕上運行的程序);不活躍(在其他狀態之間臨時過的的階段);後臺(獲取一定時間執行一些代碼但無法訪問屏幕和用戶輸入;除非運行需要一般5s後變成掛起);掛起(程序凍結不再執行);
  • 不要通過applicationWillTerminate保存程序運行狀態,應該在applicationDidEnterBackground中;因爲程序僅在後臺狀態(音頻播放、GPS定位),並且用戶或系統強制退出才調用applicationWillTerminate
  • 程序運行時收到短信通知等待觸發時,程序會applicationWillResignActive,但並不applicationDidEnterBackground;如果關閉通知則程序applicationDidBecomeActive;如果回覆通知則程序applicationDidBecomeActive,再applicationWillResignActive,再applicationDidEnterBackground
  • 程序退出前通過beginBackgroundTaskWithExpirationHandler申請更多的處理時間,endBackgroundTask告訴系統處理完成,可以真正退出
  • dispatch_after(dispatch_time(DISPATCH_TIME_NOW2 * NSEC_PER_SEC),

                           dispatch_get_main_queue(),

                           ^{ 延遲2s 後執行的代碼});


第16章 使用CoreGraphics繪圖



第17章 SpriteKit遊戲框架



第18章 輕點、觸摸和手勢

  • 手勢動作識別器UISwipeGestureRecognizer
  • 輕點動作識別器UITapGestureRecognizer
  • 捏合縮放識別器UIPinchGestureRecognizer

第19章 CoreLocation和MapKit

  • CLLocationManager、CLLocation、CLLocationDistance


第20章 陀螺儀和加速計

  • 加速計測量加速度和重力(三軸加速計),陀旋儀傳感器測量設備圍繞軸旋轉值;
  • CMMotionManager、CMDeviceMotion(CMAccelerometerData and CMGyroData)

第21章 攝像頭和照片庫

  • 圖片控件UIImageView
  • 視頻沒有控件可以通過控制器裏的view實現,如MPMoviePlayerController.view
  • viewDidLoad在試圖加載的時候調用,viewDidAppear在試圖每次出現的時候調用,所以圖片或視頻選擇或取消選取之後試圖的更新可以在viewDidAppear裏調用update

第22章 應用本地化

  • NSLocale用戶語言和地區首選項
  • NSLocalizedString本地化通過關鍵字找到對應的配置值


其他

  • #pragma編譯器指令(IDE),代碼中 "#pragma mark xxxx",爲了方便查找和導航代碼用的,或者"/ MARK:xxx"
  • 儘量用NSInteger,不用Int,是因爲編譯器會自動選擇合適的目錄類型編譯(如int64下NSInteger64位)


快捷鍵:
模擬器
  • shift+command+H,運行放回主界面
  • shift+command+H+H,切換到程序退出的選擇頁面
  • Option+觸摸按鍵,旋轉和捏合
  • Shift+Option+觸摸按鍵,多點觸摸滑動
  • Command+左(右)鍵,旋轉設備

xcode
  • 關鍵字+Option -> ? ,再點擊可以得到幫助列表
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章