iOS是由蘋果公司開發的移動操做系統.數據庫
iOS 應用有5中狀態:編程
//應用將要進入非活動調用 (不接受消息或事件)
- (void)applicationWillResignActive:(UIApplication *)application;
//應用進入活動調用 (接收消息或事件)
- (void)applicationDidBecomeActive:(UIApplication *)application;
//應用進入後臺調用 (設置後臺繼續運行)
- (void)applicationDidEnterBackground:(UIApplication *)application;
//應用將要進入前臺調用
- (void)applicationWillEnterForeground:(UIApplication *)application;
//應用將要退出調用 (保存數據,退出前清理)
- (void)applicationWillTerminate:(UIApplication *)application;
//應用被終止前調用 (內存清理,方式應用被終止)
- (void)applicationDidReceiveMemoryWarning:(UIApplication *)application;
//應用載入後調用
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions;
//應用打開URL時調用
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url;
複製代碼
OC 引入引用計數機制來跟蹤並管理對象的生命週期. iOS 5以前採用 MRC(手動內存管理) 管理內存.需用開發人員手動調用reatain,release等方法.
iOS 5以後採用 ARC(自動內存管理) 管理內存,不用開發人員去關心引用計數的變化.swift
操做 | 對應 OC 方法 | 引用計數變化 |
---|---|---|
建立對象 | alloc,new 等 | 生成對象,引用計數設置爲 1 |
持有對象 | reatain | 引用計數 +1 |
釋放對象 | release | 引用計數 -1 |
廢棄對象 | dealloc | 引用計數爲0,釋放內存 |
alloc 與 dealloc,reatain與 release 成對存在, 誰建立誰釋放,誰retain誰釋放
只有當引用計數爲 0 是對象纔會銷燬回收內存.設計模式
@property(nonatomic, strong)UITextField *textField;
OC 採用 '@property' 聲明對象, 會默認生成一個 '_textField' 成員變量與與之對應的 'setter/getter' 方法.緩存
修飾符 | 描述 | 引用計數變化 |
---|---|---|
copy | 複製,建立一個新對象,一般修飾 NSString,NSArray,NSDictionary,NSSet | 新對象引用計數爲 1,舊對象不變 |
retain | 釋放舊對象,主要用於(MRC) | 釋放舊對象,計數 -1,新對象 retain, 計數 +1 |
strong | 強引用,與 retain類似 | 釋放舊對象,計數 -1,新對象 retain, 計數 +1 |
assign | 修飾基本數據類型 | 不變 |
weak | 與assign相似,修飾對象,對消銷燬後自動變成 nil,主要用於修飾 delegate | 不變 |
readwrite | 可讀寫,生成 setter 與 getter 方法 | - |
readonly | 只讀,只爲屬性生成 getter 方法 | - |
nonatomic | 非原子屬性,不爲 setter 方式加鎖,非線程安全,一般採用這種,執行效率高 | - |
atomic | 原子屬性,爲 setter 方式加鎖,線程安全 | - |
iOS 全部的類都繼承與 NSObject, 主要分爲 UI 和 NS 兩大類. UI 主要爲視圖, NS 爲數據操做. 圖解: ![UI 系](iOS 總結_1.png) ![UI 系](iOS 總結_2.png)安全
其餘: UIViewController 生命週期: 初始化 --> loadView --> viewDidLoad --> viewWillAppear --> viewWillLayoutSubviews --> viewDidLayoutSubviews --> viewDidAppear --> viewWillDisappear --> viewDidDisappear --> deallocapp
在iOS開發中,Protocol是一種常常用到的設計模式,蘋果的系統框架中也廣泛用到了這種方式,好比UITableView中的. 協議聲明:框架
#import <Foundation/Foundation.h>
@protocol ProtocolDelegate <NSObject> // 必須實現方法 @required - (NSString*)getName; // 可選方法 @optional - (NSString*)getAge; @end 複製代碼
協議使用異步
代理: 當前類(委託者)將一些操做委託給另外一個類(代理)去完成. 委託者須要作的事:編程語言
Person+sport.h
#import "Person.h"
@interface Person (sport)
- (void)playFootBall;
@end
複製代碼
Person+sport.m
#import "Person+sport.h"
@implementation Person (sport)
- (void)playFootBall {
NSLog(@"playFootBall");
}
@end
複製代碼
類擴展是分類的一個特例,爲一個類添加一些私有成員變量和方法(經常使用). 類擴展定義的方法,須在類的implement 中實現 類擴展能夠定義屬性 聲明:
#import "Person.h"
@interface Person ()
- (void)say;
@end
複製代碼
iOS 中分類(Categories) 和 繼承(Inherit)有相同的功能,但在一些細節上又有差別,如何選擇。 使用繼承:
UITableView 是 iOS 開發中最長用的控件,爲了節省內存開銷, UITableView 使用重用機制(重用 cell 單元格).
static NSString *reuseIndentifier = @"MyCell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:reuseIndentifier];
if (!cell) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:reuseIndentifier];
}
複製代碼
UITableView 維護這兩個隊列,單前可視 cell 隊列 visiableCells, 可重用 cell 隊列 reusableTableCells(重回池). 在最初visiableCells, reusableTableCells 都爲空, "UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell"];" 獲取 cell 爲 nil, 執行 cell 初始化方法建立顯示並存入到 visiableCells.若是屏幕最多顯示 cell 個數爲10,當加載完第11個 cell 時建立的第一個 cell 在 visiableCells 移除加入到 reusableTableCells 中,因此在加載第12個 cell 時只需在 reusableTableCells 取出 cell 便可.第十二個 cell 加載完成後建立的第二個 cell 移出 visiableCells 進入 reusableTableCells 中,依次類推(理論講只需建立11個 cell 就可).