UI_设计模式_单例

单例设计模式(和代理模式同属于设计模式)

    • 设计原理:始终返回一个实例,即一个类始终只有一个实例,只初始化一次。
    • 意图:   1.这个单例对象作为全局对象       2.避免重量级对象的重复创建
    • Foundation用过的对象单例有:NSFileManager
      • 创建单例的基本步骤:

  1. 声明一个单例对象的静态实例,并初始化为nil
  2. 创建一个类的类工厂方法,生成一个该类的实例,当且仅当这个类的实例为nil时覆盖allocWithZone:方法,确保用户(程序员)再直接分配和初始化对象时,不会产生另一个对象
  3. 实现NSCopying协议,覆盖release、autorelease、retain、retainCount方法,以此确保单例的状态。(为了不让它销毁,和修改引用计数)
  4. 在多线程环境中,注意使用@synchronized关键字,确保静态实例被正确的创建和初始化。

 

 1 //单例的基本实现
 2 //定义静态对象和工厂方法
 3 static File *shareFile = nil;
 4 +(File *)shareFile{
 5 @synchronized(self) {
 6  //加同步锁,线程保护
 7 if (shareFile == nil)
 8 {
 9     shareFile = [[self alloc] init];
10         }
11     }
12     return shareFile;
13 }
14 
15 //覆盖allocWithZone:方法
16 +(id)allocWithZone:(NSZone *)zone{
17     NSLog(@“ nil  %p”, zone);
18     @synchronized(self){
19     if(shareFile ==nil){
20     shareFile = [super allocWithZone:zone];
21     return shareFile;
22         }
23     }
24     return shareFile;
25 }
26 
27 //实现copy协议,覆盖与内存相关的方法
28 -(id)copyWithZone:(NSZone *)zone{
29     return self;
30 }//实现copy协议,返回本身
31 
32 -(id)retain{ 
33     return self;
34 }//返回本身
35 
36 -(NSUInteger)retainCount{
37     return UINT_MAX;
38 }//返回一个无符号整型范围最大值
39 
40 -(oneway void)release{}//什么都不做
41 
42 -(id)autorelease{return self;}//返回对象本身

 

posted @ 2015-04-11 14:21  captivity  阅读(122)  评论(0)    收藏  举报