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 为数据操做. 图解:  安全
其余: 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 就可).