UI一揽子计划 12 (模态ViewController、单例、通讯录实战、)

一.模态ViewController

程序中切换⻚面,可以使⽤用 UINavigationController 。通过导航功能实现⻚面切 换。
某种情况下,可以使⽤视图控制器的一对⽅法实现切换⻚面 1. presentViewController:animated:completion: 展⽰示新的⻚面 2. 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 模态显示动画样式

二.单例

单例。单:唯一性。例:实例对象。即使用某个类创建的对象是程
序中唯一的实例对象。 注:通常每次使⽤用 alloc 创建的是不同的对象。
如果⼀个类只能创建⼀个对象,称为单例类。单例类可以是⼯具类, 视图类,控制器类。
某些时候,程序中的多个类需要使⽤同⼀个变量。如何处理?将变量
定义在单例类中,则所有类在操作这个变量时都很⽅便容易。
注意 :
操作单例对象的变量存储在静态区,程序关闭后由系统自动回收。
单例对象存储在堆区,不释放,程序关闭后由系统自动回收。
变量和单例对象的生命周期与程序同步。
优势:
在内存中只有⼀一个对象,节省内存空间。
避免频繁的创建销毁对象,可以提高性能。
避免对共享资源的多重占用。
可以全局访问。
降低模块之间的耦合度,降低代码的复杂度。
MyHandle.h
@interface MyHandle : NSObject
// 声明一个属性 用于传值
@property (nonatomic,retain)NSString *name;

// 声明类方法 如果不声明 在类外部调用不了
+ (
MyHandle *)shareHandle;
@end
MyHandle.m
 *  单例
 *  1.
单例是个类 创造出来的对象是单例对象
 *  2.
单例对象一旦被创造出来(开辟空间 只有到程序结束才能被释放  即只能被初始化一次
    3.
单例对象使用类方法创建
    4.
不用程序员管理内存  随程序的关闭而自动释放
    5.
方法的命名规范---->  share开头
 */


/*
单例的用途
    1.
可以在界面当中进行界面传值
        (1).
怎么传值?
    2.
对数据的操作(类方法)
*
*/


+(
MyHandle *)shareHandle
{
   
// 首先 在静态区定义一个指针
   
static MyHandle *handle = nil;   // 静态区的指针 (只初始化一次)
   
// 如果这个指针指向的区域为空
   
if (handle == nil) {
       
//就在堆区开辟空间 常见对象
       
// 一旦初始化 就不可能为空  即只被初始化一次
        handle = [[
MyHandle alloc]init];     // 堆区分配内存空间
    }
   
// 面试可能会被问到的
   
// 单例为什么不使用自动释放?
   
//: 1. 系统方法中有未知的自动释放池,如果对一个对象进行autorelease自动释放的话,该对象可能会进入未知的系统释放池中被释放,可能会出现内存问题.
   
return handle;    // 静态区的指针指向了堆区分配的内存空间  由系统结束时候来自动回收这块内存区域
}
三.通讯录实战

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值