第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(不對對象擁有所有權)
- 選擇*.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_NOW, 2 * 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+左(右)鍵,旋轉設備
- 關鍵字+Option -> ? ,再點擊可以得到幫助列表