1、模态视图控制器
介绍
程序中切换页面,可以使用UINavigationController。通过导航功能实现页面切换。
某种情况下,可以使用视图控制器的一对方法实现切换页面
presentViewController:animated:completion: 展示新的页面
dismissViewControllerAnimated:completion: 从新页面返回
通过上述方法显示的controller被称为模态视图控制器。注:模态视图控制器不是一个类,只是一种方式显示的controller。
使用场景
UIImagePickerController。调用系统相册、照相机。
临时展示一些内容。例如:程序中用户登录,通讯录中添加联系人等等。
导航控制器控制的controller具有层级关系。present控制显示的controller与之前的controller是两个层级。
使用方式
presentViewController:animated:completion: 模态显示controller
在controllerA中模态显示controllerB
presenting view controller => controllerA
presented view controller => controllerB (被弹出的)
dismissViewControllerAnimated:completion: 弹出模态controller
两种实现方式,在模态controller中使用:
[self dismissViewControllerAnimated:YES completion:nil];
[self.presentingViewController dismissViewControllerAnimated:YES completion:nil];
使用self调用方法,系统会使用self.presentingViewController调用这个方法。
属性设置
modalPresentationStyle 模态controller显示样式
modalTransitionStyle 模态显示动画样式
2、单例
单例对象
单例。单:唯一性。例:实例对象。即使用某个类创建的对象是程序中唯一的实例对象。
注:通常每次使用alloc创建的是不同的对象,即单例只alloc+init一次。
单例核心:保证类的全局对象是唯一的 整个工程中只创建一次(和懒加载相似),只alloc init过一次 ,不是新创建的。
如果一个类只能创建一个对象,称为单例类。单例类可以是工具类,视图类,控制器类。
使用场景
某些时候,程序中的多个类需要使用同一个变量。如何处理?将变量定义在单例类中,则所有类在操作这个变量时都很方便容易。
使用方法
定义单例类。
定义创建单例对象的方法(类方法)。
根据需要实现伪单例或完整单例。
注意
操作单例对象的变量存储在静态区,程序关闭后由系统自动回收。
单例对象存储在堆区,不释放,程序关闭后由系统自动回收。
变量和单例对象的生命周期与程序同步。
优势
a.在内存中只有一个对象,节省内存空间。
避免频繁的创建销毁对象,可以提高性能。
避免对共享资源的多重占用。
b.可以全局访问。
降低模块之间的耦合度,降低代码的复杂度。
3、单例模式
单例模式是一种设计模式。
实现:定义一个单例类,(方法锁)保证程序中这个类只能创建唯一的实例对象,实现资源共享。
方法锁
待添加
/ 单例类使用此方法,创建单例对象
static Singleton *singleton = nil;
+ (Singleton *)defaultSingleton
{
// 方法锁,作用为:当多个线程同时调用一个方法的时候,保证只有一个县城在使用此方法。例如:A和B同时调用defaultSingleton方法,如果A正在使用此方法,那么B就不能调用,直到A使用完成,B才会执行此方法。这个也是保证单例对象的唯一性,避免初始化方法被同时多次执行。(iOS5之后新加功能) 使用相当方便。
@synchronized(self) {
// 如果还没有创建过对象,使用singleton指向新创建的对象
if (singleton == nil) {
singleton = [[Singleton alloc] init];
}
// 如果已经创建过对象,则直接返回已经创建的对象
return singleton;
}
}