码迷,mamicode.com
首页 > 移动开发 > 详细

iOS学习总结之ARC和非ARC的单例模式实现

时间:2016-04-26 02:14:21      阅读:345      评论:0      收藏:0      [点我收藏+]

标签:

先我们要明白下面三个问题:

  1. 什么是单例模式
  2. 单例模式的优点
  3. 如何实现单例模式

1.什么是单例模式

单例模式(Singleton):单例模式确保对于一个给定的类只有一个实例存在,这个实例有一个全局唯一的访问点。

 

2.单例模式的优点

  1. 节省内存开销:Singleton 会阻止其他对象实例化其自己的 Singleton 对象的副本,从而确保所有对象都访问唯一实例。
  2. 如果有一些数据,整个程序都用得上,使用同一份资源即可。(保证大家访问的数据是相同的,一致的)

  例如:[NSUserDefaults standardUserDefaults],[UIApplication sharedApplication], [UIScreen mainScreen], [NSFileManager defaultManager]等,所有的这些方法都返回一个单例对象,苹果公司大量使用了此模式。

3.如何实现单例模式

  一般情况下,项目中的工具类使用单例模式比较合适,工具类一般是整个项目都用的上,但是只用一个,所以没必要创建多个。

  单例的实现应该分为两种情况:非ARC(MRC)和ARC

3.1MRC下单例模式的实现

  MRC情况下我们的单例模式实现如下:

    1. 需要把我们的项目配置成MRC
    2. 新建一个网络工具类

  1>   在不使用单例模式的情况下打印三个实例对象,他们指向的地址是不一样的。示例代码如下:

      DHNetworkTool *tool1 = [[DHNetworkTool alloc]init];

      DHNetworkTool *tool2 = [[DHNetworkTool alloc]init];

      DHNetworkTool *tool3 = [[DHNetworkTool alloc]init];

    NSLog(@"\ntool1 = %p\ntool2 = %p\ntool3 = %p",tool1,tool2,tool3);

 技术分享

  2>    我们希望通过DHNetworkTool创建的对象是同一个,也就是只分配一块内存空间,那我们应该去重写alloc方法,因为alloc方法负责分配内存空间的。

     + (instancetype)alloc {}      + (instancetype)allocWithZone:(struct _NSZone *)zone {}

  现在发现有以上两个方法,那么我们应该重写哪个alloc方法呢?我的建议是重写后者也就是+ (instancetype)allocWithZone:(struct _NSZone *)zone {}

为什么?

       因为alloc内部会调用allocWithZone,也就是说allocWithZone方法更底层。也就是说我们实现alloc方法的话就只能拦截alloc方法,但是实现allocWithZone方法的话,任何内存分配的方法我们都能拦截。

       Zone的意思就是空间,当你调用这个方法的时候,系统会自动给你传递一块内存空间,Zone就是系统分配给开发者APP的内存空间。

  注意:在我们实现allocWithZone能调用父类的方法吗?不能!如果调用了就相当于我们没写!!!我们的目的就是不要使用父类的,我们自己做自己的事情。

  3>    我们需要创建一个全局变量为了不让别人访问,我们应该使用static修饰一下

技术分享
 1 //用static是为了不让别人访问这个变量
 2 static DHNetworkTool *_networkTool = nil;
 3 
 4 //alloc内部会调用allocWithZone,我们实现alloc方法的话就只能拦截alloc方法,但是实现allocWithZone方法的话,任何内存分配的方法我们都能拦截
 5 + (instancetype)allocWithZone:(struct _NSZone *)zone {
 6 
 7     //如果在这里调用父类的方法相当于没有重写allocWithZone方法
 8 //    return [super allocWithZone:zone];
 9     
10     //这样判断的话就能保证我们返回的都是_networkTool这个对象了
11     if (_networkTool == nil) {
12         
13         static dispatch_once_t onceToken;
14         dispatch_once(&onceToken, ^{//保证线程安全,而且这个代码只会被执行一次
15             
16             //在这里可以调用父类的方法了
17             _networkTool = [super allocWithZone:zone];
18         });
19         
20         
21     }
22     return _networkTool;
23 }
技术分享

 

 

4>   我们初步实现后可以再次验证是否创建的对象是同一个

 技术分享

打印结果可以验证是同一个对象,因为实例化对象的时候要调用allocWithZone方法,在该方法实例化对象的代码只会走一次,所以保证每次实例化的对象都是同一个。

  5>   在MRC环境下我们这样写是不严谨的,因为还可能会调用release方法!如果调用了release方法那就意味着这个对象完了,下次在调用alloc方法的时候就没办法创建对象了,因为在allocWithZone方法中实例化对象的代码只走一次。

http://zd.lfang.com/ask/30424/
http://zd.lfang.com/ask/30423/
http://zd.lfang.com/ask/30422/
http://zd.lfang.com/ask/30421/
http://zd.lfang.com/ask/30420/
http://zd.lfang.com/ask/30419/
http://zd.lfang.com/ask/30418/
http://zd.lfang.com/ask/30417/
http://zd.lfang.com/ask/30416/
http://zd.lfang.com/ask/30415/
http://zd.lfang.com/ask/30414/
http://zd.lfang.com/ask/30413/
http://zd.lfang.com/ask/30412/
http://zd.lfang.com/ask/30411/
http://zd.lfang.com/ask/30410/
http://zd.lfang.com/ask/30409/
http://zd.lfang.com/ask/30408/
http://zd.lfang.com/ask/30407/
http://zd.lfang.com/ask/30406/
http://zd.lfang.com/ask/30405/
http://zd.lfang.com/ask/30404/
http://zd.lfang.com/ask/30403/
http://zd.lfang.com/ask/30402/
http://zd.lfang.com/ask/30401/
http://zd.lfang.com/ask/30400/
http://zd.lfang.com/ask/30399/
http://zd.lfang.com/ask/30398/
http://zd.lfang.com/ask/30397/
http://zd.lfang.com/ask/30396/
http://zd.lfang.com/ask/30395/
http://zd.lfang.com/ask/30409/
http://zd.lfang.com/ask/30408/
http://zd.lfang.com/ask/30407/
http://zd.lfang.com/ask/30406/
http://zd.lfang.com/ask/30405/
http://zd.lfang.com/ask/30404/
http://zd.lfang.com/ask/30403/
http://zd.lfang.com/ask/30402/
http://zd.lfang.com/ask/30401/
http://zd.lfang.com/ask/30400/
http://zd.lfang.com/ask/30399/
http://zd.lfang.com/ask/30398/
http://zd.lfang.com/ask/30397/
http://zd.lfang.com/ask/30396/
http://zd.lfang.com/ask/30395/
http://zd.lfang.com/ask/30394/
http://zd.lfang.com/ask/30393/
http://zd.lfang.com/ask/30392/
http://zd.lfang.com/ask/30391/
http://zd.lfang.com/ask/30390/
http://zd.lfang.com/ask/30389/
http://zd.lfang.com/ask/30388/
http://zd.lfang.com/ask/30387/
http://zd.lfang.com/ask/30386/
http://zd.lfang.com/ask/30385/
http://zd.lfang.com/ask/30384/
http://zd.lfang.com/ask/30383/
http://zd.lfang.com/ask/30382/
http://zd.lfang.com/ask/30381/
http://zd.lfang.com/ask/30380/
http://zd.lfang.com/ask/30394/
http://zd.lfang.com/ask/30393/
http://zd.lfang.com/ask/30392/
http://zd.lfang.com/ask/30391/
http://zd.lfang.com/ask/30390/
http://zd.lfang.com/ask/30389/
http://zd.lfang.com/ask/30388/
http://zd.lfang.com/ask/30387/
http://zd.lfang.com/ask/30386/
http://zd.lfang.com/ask/30385/
http://zd.lfang.com/ask/30384/
http://zd.lfang.com/ask/30383/
http://zd.lfang.com/ask/30382/
http://zd.lfang.com/ask/30381/
http://zd.lfang.com/ask/30380/
http://zd.lfang.com/ask/30379/
http://zd.lfang.com/ask/30378/
http://zd.lfang.com/ask/30377/
http://zd.lfang.com/ask/30376/
http://zd.lfang.com/ask/30375/
http://zd.lfang.com/ask/30374/
http://zd.lfang.com/ask/30373/
http://zd.lfang.com/ask/30372/
http://zd.lfang.com/ask/30371/
http://zd.lfang.com/ask/30370/
http://zd.lfang.com/ask/30369/
http://zd.lfang.com/ask/30368/
http://zd.lfang.com/ask/30367/
http://zd.lfang.com/ask/30366/
http://zd.lfang.com/ask/30365/
http://zd.lfang.com/ask/30379/
http://zd.lfang.com/ask/30378/
http://zd.lfang.com/ask/30377/
http://zd.lfang.com/ask/30376/
http://zd.lfang.com/ask/30375/
http://zd.lfang.com/ask/30374/
http://zd.lfang.com/ask/30373/
http://zd.lfang.com/ask/30372/
http://zd.lfang.com/ask/30371/
http://zd.lfang.com/ask/30370/
http://zd.lfang.com/ask/30369/
http://zd.lfang.com/ask/30368/
http://zd.lfang.com/ask/30367/
http://zd.lfang.com/ask/30366/
http://zd.lfang.com/ask/30365/
http://zd.lfang.com/ask/30364/
http://zd.lfang.com/ask/30363/
http://zd.lfang.com/ask/30362/
http://zd.lfang.com/ask/30361/
http://zd.lfang.com/ask/30360/
http://zd.lfang.com/ask/30359/
http://zd.lfang.com/ask/30358/
http://zd.lfang.com/ask/30357/
http://zd.lfang.com/ask/30356/
http://zd.lfang.com/ask/30355/
http://zd.lfang.com/ask/30354/
http://zd.lfang.com/ask/30353/
http://zd.lfang.com/ask/30352/
http://zd.lfang.com/ask/30351/
http://zd.lfang.com/ask/30350/
http://zd.lfang.com/ask/30364/
http://zd.lfang.com/ask/30363/
http://zd.lfang.com/ask/30362/
http://zd.lfang.com/ask/30361/
http://zd.lfang.com/ask/30360/
http://zd.lfang.com/ask/30359/
http://zd.lfang.com/ask/30358/
http://zd.lfang.com/ask/30357/
http://zd.lfang.com/ask/30356/
http://zd.lfang.com/ask/30355/
http://zd.lfang.com/ask/30354/
http://zd.lfang.com/ask/30353/
http://zd.lfang.com/ask/30352/
http://zd.lfang.com/ask/30351/
http://zd.lfang.com/ask/30350/
http://zd.lfang.com/ask/30349/
http://zd.lfang.com/ask/30348/
http://zd.lfang.com/ask/30347/
http://zd.lfang.com/ask/30346/
http://zd.lfang.com/ask/30345/
http://zd.lfang.com/ask/30344/
http://zd.lfang.com/ask/30343/
http://zd.lfang.com/ask/30342/
http://zd.lfang.com/ask/30341/
http://zd.lfang.com/ask/30340/
http://zd.lfang.com/ask/30339/
http://zd.lfang.com/ask/30338/
http://zd.lfang.com/ask/30337/
http://zd.lfang.com/ask/30336/
http://zd.lfang.com/ask/30335/
http://zd.lfang.com/ask/30349/
http://zd.lfang.com/ask/30348/
http://zd.lfang.com/ask/30347/
http://zd.lfang.com/ask/30346/
http://zd.lfang.com/ask/30345/
http://zd.lfang.com/ask/30344/
http://zd.lfang.com/ask/30343/
http://zd.lfang.com/ask/30342/
http://zd.lfang.com/ask/30341/
http://zd.lfang.com/ask/30340/
http://zd.lfang.com/ask/30339/
http://zd.lfang.com/ask/30338/
http://zd.lfang.com/ask/30337/
http://zd.lfang.com/ask/30336/
http://zd.lfang.com/ask/30335/
http://zd.lfang.com/ask/30334/
http://zd.lfang.com/ask/30333/
http://zd.lfang.com/ask/30332/
http://zd.lfang.com/ask/30331/
http://zd.lfang.com/ask/30330/
http://zd.lfang.com/ask/30329/
http://zd.lfang.com/ask/30328/
http://zd.lfang.com/ask/30327/
http://zd.lfang.com/ask/30326/
http://zd.lfang.com/ask/30325/
http://zd.lfang.com/ask/30324/
http://zd.lfang.com/ask/30323/
http://zd.lfang.com/ask/30322/
http://zd.lfang.com/ask/30321/
http://zd.lfang.com/ask/30320/
http://zd.lfang.com/ask/30334/
http://zd.lfang.com/ask/30333/
http://zd.lfang.com/ask/30332/
http://zd.lfang.com/ask/30331/
http://zd.lfang.com/ask/30330/
http://zd.lfang.com/ask/30329/
http://zd.lfang.com/ask/30328/
http://zd.lfang.com/ask/30327/
http://zd.lfang.com/ask/30326/
http://zd.lfang.com/ask/30325/
http://zd.lfang.com/ask/30324/
http://zd.lfang.com/ask/30323/
http://zd.lfang.com/ask/30322/
http://zd.lfang.com/ask/30321/
http://zd.lfang.com/ask/30320/
http://zd.lfang.com/ask/30319/
http://zd.lfang.com/ask/30318/
http://zd.lfang.com/ask/30317/
http://zd.lfang.com/ask/30316/
http://zd.lfang.com/ask/30315/
http://zd.lfang.com/ask/30314/
http://zd.lfang.com/ask/30313/
http://zd.lfang.com/ask/30312/
http://zd.lfang.com/ask/30311/
http://zd.lfang.com/ask/30310/
http://zd.lfang.com/ask/30309/
http://zd.lfang.com/ask/30308/
http://zd.lfang.com/ask/30307/
http://zd.lfang.com/ask/30306/
http://zd.lfang.com/ask/30305/
http://zd.lfang.com/ask/30319/
http://zd.lfang.com/ask/30318/
http://zd.lfang.com/ask/30317/
http://zd.lfang.com/ask/30316/
http://zd.lfang.com/ask/30315/
http://zd.lfang.com/ask/30314/
http://zd.lfang.com/ask/30313/
http://zd.lfang.com/ask/30312/
http://zd.lfang.com/ask/30311/
http://zd.lfang.com/ask/30310/
http://zd.lfang.com/ask/30309/
http://zd.lfang.com/ask/30308/
http://zd.lfang.com/ask/30307/
http://zd.lfang.com/ask/30306/
http://zd.lfang.com/ask/30305/
http://zd.lfang.com/ask/30304/
http://zd.lfang.com/ask/30303/
http://zd.lfang.com/ask/30302/
http://zd.lfang.com/ask/30301/
http://zd.lfang.com/ask/30300/
http://zd.lfang.com/ask/30299/
http://zd.lfang.com/ask/30298/
http://zd.lfang.com/ask/30297/
http://zd.lfang.com/ask/30296/
http://zd.lfang.com/ask/30295/
http://zd.lfang.com/ask/30294/
http://zd.lfang.com/ask/30293/
http://zd.lfang.com/ask/30292/
http://zd.lfang.com/ask/30291/
http://zd.lfang.com/ask/30290/
http://zd.lfang.com/ask/30304/
http://zd.lfang.com/ask/30303/
http://zd.lfang.com/ask/30302/
http://zd.lfang.com/ask/30301/
http://zd.lfang.com/ask/30300/
http://zd.lfang.com/ask/30299/
http://zd.lfang.com/ask/30298/
http://zd.lfang.com/ask/30297/
http://zd.lfang.com/ask/30296/
http://zd.lfang.com/ask/30295/
http://zd.lfang.com/ask/30294/
http://zd.lfang.com/ask/30293/
http://zd.lfang.com/ask/30292/
http://zd.lfang.com/ask/30291/
http://zd.lfang.com/ask/30290/
http://zd.lfang.com/ask/30289/
http://zd.lfang.com/ask/30288/
http://zd.lfang.com/ask/30287/
http://zd.lfang.com/ask/30286/
http://zd.lfang.com/ask/30285/
http://zd.lfang.com/ask/30284/
http://zd.lfang.com/ask/30283/
http://zd.lfang.com/ask/30282/
http://zd.lfang.com/ask/30281/
http://zd.lfang.com/ask/30280/
http://zd.lfang.com/ask/30279/
http://zd.lfang.com/ask/30278/
http://zd.lfang.com/ask/30277/
http://zd.lfang.com/ask/30276/
http://zd.lfang.com/ask/30275/
http://zd.lfang.com/ask/30289/
http://zd.lfang.com/ask/30288/
http://zd.lfang.com/ask/30287/
http://zd.lfang.com/ask/30286/
http://zd.lfang.com/ask/30285/
http://zd.lfang.com/ask/30284/
http://zd.lfang.com/ask/30283/
http://zd.lfang.com/ask/30282/
http://zd.lfang.com/ask/30281/
http://zd.lfang.com/ask/30280/
http://zd.lfang.com/ask/30279/
http://zd.lfang.com/ask/30278/
http://zd.lfang.com/ask/30277/
http://zd.lfang.com/ask/30276/
http://zd.lfang.com/ask/30275/
http://zd.lfang.com/ask/30274/
http://zd.lfang.com/ask/30273/
http://zd.lfang.com/ask/30272/
http://zd.lfang.com/ask/30271/
http://zd.lfang.com/ask/30270/
http://zd.lfang.com/ask/30269/
http://zd.lfang.com/ask/30268/
http://zd.lfang.com/ask/30267/
http://zd.lfang.com/ask/30266/
http://zd.lfang.com/ask/30265/
http://zd.lfang.com/ask/30264/
http://zd.lfang.com/ask/30263/
http://zd.lfang.com/ask/30262/
http://zd.lfang.com/ask/30261/
http://zd.lfang.com/ask/30260/
http://zd.lfang.com/ask/30274/
http://zd.lfang.com/ask/30273/
http://zd.lfang.com/ask/30272/
http://zd.lfang.com/ask/30271/
http://zd.lfang.com/ask/30270/
http://zd.lfang.com/ask/30269/
http://zd.lfang.com/ask/30268/
http://zd.lfang.com/ask/30267/
http://zd.lfang.com/ask/30266/
http://zd.lfang.com/ask/30265/
http://zd.lfang.com/ask/30264/
http://zd.lfang.com/ask/30263/
http://zd.lfang.com/ask/30262/
http://zd.lfang.com/ask/30261/
http://zd.lfang.com/ask/30260/
http://zd.lfang.com/ask/30259/
http://zd.lfang.com/ask/30258/
http://zd.lfang.com/ask/30257/
http://zd.lfang.com/ask/30256/
http://zd.lfang.com/ask/30255/
http://zd.lfang.com/ask/30254/
http://zd.lfang.com/ask/30253/
http://zd.lfang.com/ask/30252/
http://zd.lfang.com/ask/30251/
http://zd.lfang.com/ask/30250/
http://zd.lfang.com/ask/30249/
http://zd.lfang.com/ask/30248/
http://zd.lfang.com/ask/30247/
http://zd.lfang.com/ask/30246/
http://zd.lfang.com/ask/30245/
http://zd.lfang.com/ask/30259/
http://zd.lfang.com/ask/30258/
http://zd.lfang.com/ask/30257/
http://zd.lfang.com/ask/30256/
http://zd.lfang.com/ask/30255/
http://zd.lfang.com/ask/30254/
http://zd.lfang.com/ask/30253/
http://zd.lfang.com/ask/30252/
http://zd.lfang.com/ask/30251/
http://zd.lfang.com/ask/30250/
http://zd.lfang.com/ask/30249/
http://zd.lfang.com/ask/30248/
http://zd.lfang.com/ask/30247/
http://zd.lfang.com/ask/30246/
http://zd.lfang.com/ask/30245/
http://zd.lfang.com/ask/30244/
http://zd.lfang.com/ask/30243/
http://zd.lfang.com/ask/30242/
http://zd.lfang.com/ask/30241/
http://zd.lfang.com/ask/30240/
http://zd.lfang.com/ask/30239/
http://zd.lfang.com/ask/30238/
http://zd.lfang.com/ask/30237/
http://zd.lfang.com/ask/30236/
http://zd.lfang.com/ask/30235/
http://zd.lfang.com/ask/30234/
http://zd.lfang.com/ask/30233/
http://zd.lfang.com/ask/30232/
http://zd.lfang.com/ask/30231/
http://zd.lfang.com/ask/30230/
http://zd.lfang.com/ask/30244/
http://zd.lfang.com/ask/30243/
http://zd.lfang.com/ask/30242/
http://zd.lfang.com/ask/30241/
http://zd.lfang.com/ask/30240/
http://zd.lfang.com/ask/30239/
http://zd.lfang.com/ask/30238/
http://zd.lfang.com/ask/30237/
http://zd.lfang.com/ask/30236/
http://zd.lfang.com/ask/30235/
http://zd.lfang.com/ask/30234/
http://zd.lfang.com/ask/30233/
http://zd.lfang.com/ask/30232/
http://zd.lfang.com/ask/30231/
http://zd.lfang.com/ask/30230/
http://zd.lfang.com/ask/30229/
http://zd.lfang.com/ask/30228/
http://zd.lfang.com/ask/30227/
http://zd.lfang.com/ask/30226/
http://zd.lfang.com/ask/30225/
http://zd.lfang.com/ask/30224/
http://zd.lfang.com/ask/30223/
http://zd.lfang.com/ask/30222/
http://zd.lfang.com/ask/30221/
http://zd.lfang.com/ask/30220/
http://zd.lfang.com/ask/30219/
http://zd.lfang.com/ask/30218/
http://zd.lfang.com/ask/30217/
http://zd.lfang.com/ask/30216/
http://zd.lfang.com/ask/30215/
http://zd.lfang.com/ask/30229/
http://zd.lfang.com/ask/30228/
http://zd.lfang.com/ask/30227/
http://zd.lfang.com/ask/30226/
http://zd.lfang.com/ask/30225/
http://zd.lfang.com/ask/30224/
http://zd.lfang.com/ask/30223/
http://zd.lfang.com/ask/30222/
http://zd.lfang.com/ask/30221/
http://zd.lfang.com/ask/30220/
http://zd.lfang.com/ask/30219/
http://zd.lfang.com/ask/30218/
http://zd.lfang.com/ask/30217/
http://zd.lfang.com/ask/30216/
http://zd.lfang.com/ask/30215/
http://zd.lfang.com/ask/30214/
http://zd.lfang.com/ask/30213/
http://zd.lfang.com/ask/30212/
http://zd.lfang.com/ask/30211/
http://zd.lfang.com/ask/30210/
http://zd.lfang.com/ask/30209/
http://zd.lfang.com/ask/30208/
http://zd.lfang.com/ask/30207/
http://zd.lfang.com/ask/30206/
http://zd.lfang.com/ask/30205/
http://zd.lfang.com/ask/30204/
http://zd.lfang.com/ask/30203/
http://zd.lfang.com/ask/30202/
http://zd.lfang.com/ask/30201/
http://zd.lfang.com/ask/30200/
http://zd.lfang.com/ask/30214/
http://zd.lfang.com/ask/30213/
http://zd.lfang.com/ask/30212/
http://zd.lfang.com/ask/30211/
http://zd.lfang.com/ask/30210/
http://zd.lfang.com/ask/30209/
http://zd.lfang.com/ask/30208/
http://zd.lfang.com/ask/30207/
http://zd.lfang.com/ask/30206/
http://zd.lfang.com/ask/30205/
http://zd.lfang.com/ask/30204/
http://zd.lfang.com/ask/30203/
http://zd.lfang.com/ask/30202/
http://zd.lfang.com/ask/30201/
http://zd.lfang.com/ask/30200/
http://zd.lfang.com/ask/30199/
http://zd.lfang.com/ask/30198/
http://zd.lfang.com/ask/30197/
http://zd.lfang.com/ask/30196/
http://zd.lfang.com/ask/30195/
http://zd.lfang.com/ask/30194/
http://zd.lfang.com/ask/30193/
http://zd.lfang.com/ask/30192/
http://zd.lfang.com/ask/30191/
http://zd.lfang.com/ask/30190/
http://zd.lfang.com/ask/30189/
http://zd.lfang.com/ask/30188/
http://zd.lfang.com/ask/30187/
http://zd.lfang.com/ask/30186/
http://zd.lfang.com/ask/30185/
http://zd.lfang.com/ask/30199/
http://zd.lfang.com/ask/30198/
http://zd.lfang.com/ask/30197/
http://zd.lfang.com/ask/30196/
http://zd.lfang.com/ask/30195/
http://zd.lfang.com/ask/30194/
http://zd.lfang.com/ask/30193/
http://zd.lfang.com/ask/30192/
http://zd.lfang.com/ask/30191/
http://zd.lfang.com/ask/30190/
http://zd.lfang.com/ask/30189/
http://zd.lfang.com/ask/30188/
http://zd.lfang.com/ask/30187/
http://zd.lfang.com/ask/30186/
http://zd.lfang.com/ask/30185/
http://zd.lfang.com/ask/30184/
http://zd.lfang.com/ask/30183/
http://zd.lfang.com/ask/30182/
http://zd.lfang.com/ask/30181/
http://zd.lfang.com/ask/30180/
http://zd.lfang.com/ask/30179/
http://zd.lfang.com/ask/30178/
http://zd.lfang.com/ask/30177/
http://zd.lfang.com/ask/30176/
http://zd.lfang.com/ask/30175/
http://zd.lfang.com/ask/30174/
http://zd.lfang.com/ask/30173/
http://zd.lfang.com/ask/30172/
http://zd.lfang.com/ask/30171/
http://zd.lfang.com/ask/30170/
http://zd.lfang.com/ask/30184/
http://zd.lfang.com/ask/30183/
http://zd.lfang.com/ask/30182/
http://zd.lfang.com/ask/30181/
http://zd.lfang.com/ask/30180/
http://zd.lfang.com/ask/30179/
http://zd.lfang.com/ask/30178/
http://zd.lfang.com/ask/30177/
http://zd.lfang.com/ask/30176/
http://zd.lfang.com/ask/30175/
http://zd.lfang.com/ask/30174/
http://zd.lfang.com/ask/30173/
http://zd.lfang.com/ask/30172/
http://zd.lfang.com/ask/30171/
http://zd.lfang.com/ask/30170/
http://zd.lfang.com/ask/30169/
http://zd.lfang.com/ask/30168/
http://zd.lfang.com/ask/30167/
http://zd.lfang.com/ask/30166/
http://zd.lfang.com/ask/30165/
http://zd.lfang.com/ask/30164/
http://zd.lfang.com/ask/30163/
http://zd.lfang.com/ask/30162/
http://zd.lfang.com/ask/30161/
http://zd.lfang.com/ask/30160/
http://zd.lfang.com/ask/30159/
http://zd.lfang.com/ask/30158/
http://zd.lfang.com/ask/30157/
http://zd.lfang.com/ask/30156/
http://zd.lfang.com/ask/30155/
http://zd.lfang.com/ask/30169/
http://zd.lfang.com/ask/30168/
http://zd.lfang.com/ask/30167/
http://zd.lfang.com/ask/30166/
http://zd.lfang.com/ask/30165/
http://zd.lfang.com/ask/30164/
http://zd.lfang.com/ask/30163/
http://zd.lfang.com/ask/30162/
http://zd.lfang.com/ask/30161/
http://zd.lfang.com/ask/30160/
http://zd.lfang.com/ask/30159/
http://zd.lfang.com/ask/30158/
http://zd.lfang.com/ask/30157/
http://zd.lfang.com/ask/30156/
http://zd.lfang.com/ask/30155/
http://zd.lfang.com/ask/30154/
http://zd.lfang.com/ask/30153/
http://zd.lfang.com/ask/30152/
http://zd.lfang.com/ask/30151/
http://zd.lfang.com/ask/30150/
http://zd.lfang.com/ask/30149/
http://zd.lfang.com/ask/30148/
http://zd.lfang.com/ask/30147/
http://zd.lfang.com/ask/30146/
http://zd.lfang.com/ask/30145/
http://zd.lfang.com/ask/30144/
http://zd.lfang.com/ask/30143/
http://zd.lfang.com/ask/30142/
http://zd.lfang.com/ask/30141/
http://zd.lfang.com/ask/30140/
http://zd.lfang.com/ask/30154/
http://zd.lfang.com/ask/30153/
http://zd.lfang.com/ask/30152/
http://zd.lfang.com/ask/30151/
http://zd.lfang.com/ask/30150/
http://zd.lfang.com/ask/30149/
http://zd.lfang.com/ask/30148/
http://zd.lfang.com/ask/30147/
http://zd.lfang.com/ask/30146/
http://zd.lfang.com/ask/30145/
http://zd.lfang.com/ask/30144/
http://zd.lfang.com/ask/30143/
http://zd.lfang.com/ask/30142/
http://zd.lfang.com/ask/30141/
http://zd.lfang.com/ask/30140/
http://zd.lfang.com/ask/30139/
http://zd.lfang.com/ask/30138/
http://zd.lfang.com/ask/30137/
http://zd.lfang.com/ask/30136/
http://zd.lfang.com/ask/30135/
http://zd.lfang.com/ask/30134/
http://zd.lfang.com/ask/30133/
http://zd.lfang.com/ask/30132/
http://zd.lfang.com/ask/30131/
http://zd.lfang.com/ask/30130/
http://zd.lfang.com/ask/30129/
http://zd.lfang.com/ask/30128/
http://zd.lfang.com/ask/30127/
http://zd.lfang.com/ask/30126/
http://zd.lfang.com/ask/30125/
http://zd.lfang.com/ask/30139/
http://zd.lfang.com/ask/30138/
http://zd.lfang.com/ask/30137/
http://zd.lfang.com/ask/30136/
http://zd.lfang.com/ask/30135/
http://zd.lfang.com/ask/30134/
http://zd.lfang.com/ask/30133/
http://zd.lfang.com/ask/30132/
http://zd.lfang.com/ask/30131/
http://zd.lfang.com/ask/30130/
http://zd.lfang.com/ask/30129/
http://zd.lfang.com/ask/30128/
http://zd.lfang.com/ask/30127/
http://zd.lfang.com/ask/30126/
http://zd.lfang.com/ask/30125/
http://zd.lfang.com/ask/30124/
http://zd.lfang.com/ask/30123/
http://zd.lfang.com/ask/30122/
http://zd.lfang.com/ask/30121/
http://zd.lfang.com/ask/30120/
http://zd.lfang.com/ask/30119/
http://zd.lfang.com/ask/30118/
http://zd.lfang.com/ask/30117/
http://zd.lfang.com/ask/30116/
http://zd.lfang.com/ask/30115/
http://zd.lfang.com/ask/30114/
http://zd.lfang.com/ask/30113/
http://zd.lfang.com/ask/30112/
http://zd.lfang.com/ask/30111/
http://zd.lfang.com/ask/30110/
http://zd.lfang.com/ask/30124/
http://zd.lfang.com/ask/30123/
http://zd.lfang.com/ask/30122/
http://zd.lfang.com/ask/30121/
http://zd.lfang.com/ask/30120/
http://zd.lfang.com/ask/30119/
http://zd.lfang.com/ask/30118/
http://zd.lfang.com/ask/30117/
http://zd.lfang.com/ask/30116/
http://zd.lfang.com/ask/30115/
http://zd.lfang.com/ask/30114/
http://zd.lfang.com/ask/30113/
http://zd.lfang.com/ask/30112/
http://zd.lfang.com/ask/30111/
http://zd.lfang.com/ask/30110/
http://zd.lfang.com/ask/30109/
http://zd.lfang.com/ask/30108/
http://zd.lfang.com/ask/30107/
http://zd.lfang.com/ask/30106/
http://zd.lfang.com/ask/30105/
http://zd.lfang.com/ask/30104/
http://zd.lfang.com/ask/30103/
http://zd.lfang.com/ask/30102/
http://zd.lfang.com/ask/30101/
http://zd.lfang.com/ask/30100/
http://zd.lfang.com/ask/30099/
http://zd.lfang.com/ask/30098/
http://zd.lfang.com/ask/30097/
http://zd.lfang.com/ask/30096/
http://zd.lfang.com/ask/30095/
http://zd.lfang.com/ask/30109/
http://zd.lfang.com/ask/30108/
http://zd.lfang.com/ask/30107/
http://zd.lfang.com/ask/30106/
http://zd.lfang.com/ask/30105/
http://zd.lfang.com/ask/30104/
http://zd.lfang.com/ask/30103/
http://zd.lfang.com/ask/30102/
http://zd.lfang.com/ask/30101/
http://zd.lfang.com/ask/30100/
http://zd.lfang.com/ask/30099/
http://zd.lfang.com/ask/30098/
http://zd.lfang.com/ask/30097/
http://zd.lfang.com/ask/30096/
http://zd.lfang.com/ask/30095/
http://zd.lfang.com/ask/30094/
http://zd.lfang.com/ask/30093/
http://zd.lfang.com/ask/30092/
http://zd.lfang.com/ask/30091/
http://zd.lfang.com/ask/30090/
http://zd.lfang.com/ask/30089/
http://zd.lfang.com/ask/30088/
http://zd.lfang.com/ask/30087/
http://zd.lfang.com/ask/30086/
http://zd.lfang.com/ask/30085/
http://zd.lfang.com/ask/30084/
http://zd.lfang.com/ask/30083/
http://zd.lfang.com/ask/30082/
http://zd.lfang.com/ask/30081/
http://zd.lfang.com/ask/30080/
http://zd.lfang.com/ask/30094/
http://zd.lfang.com/ask/30093/
http://zd.lfang.com/ask/30092/
http://zd.lfang.com/ask/30091/
http://zd.lfang.com/ask/30090/
http://zd.lfang.com/ask/30089/
http://zd.lfang.com/ask/30088/
http://zd.lfang.com/ask/30087/
http://zd.lfang.com/ask/30086/
http://zd.lfang.com/ask/30085/
http://zd.lfang.com/ask/30084/
http://zd.lfang.com/ask/30083/
http://zd.lfang.com/ask/30082/
http://zd.lfang.com/ask/30081/
http://zd.lfang.com/ask/30080/
http://zd.lfang.com/ask/30079/
http://zd.lfang.com/ask/30078/
http://zd.lfang.com/ask/30077/
http://zd.lfang.com/ask/30076/
http://zd.lfang.com/ask/30075/
http://zd.lfang.com/ask/30074/
http://zd.lfang.com/ask/30073/
http://zd.lfang.com/ask/30072/
http://zd.lfang.com/ask/30071/
http://zd.lfang.com/ask/30070/
http://zd.lfang.com/ask/30069/
http://zd.lfang.com/ask/30068/
http://zd.lfang.com/ask/30067/
http://zd.lfang.com/ask/30066/
http://zd.lfang.com/ask/30065/
http://zd.lfang.com/ask/30064/
http://zd.lfang.com/ask/30063/
http://zd.lfang.com/ask/30062/
http://zd.lfang.com/ask/30061/
http://zd.lfang.com/ask/30060/
http://zd.lfang.com/ask/30059/
http://zd.lfang.com/ask/30058/
http://zd.lfang.com/ask/30057/
http://zd.lfang.com/ask/30056/
http://zd.lfang.com/ask/30055/
http://zd.lfang.com/ask/30054/
http://zd.lfang.com/ask/30053/
http://zd.lfang.com/ask/30052/
http://zd.lfang.com/ask/30051/
http://zd.lfang.com/ask/30050/
http://zd.lfang.com/ask/30064/
http://zd.lfang.com/ask/30063/
http://zd.lfang.com/ask/30062/
http://zd.lfang.com/ask/30061/
http://zd.lfang.com/ask/30060/
http://zd.lfang.com/ask/30059/
http://zd.lfang.com/ask/30058/
http://zd.lfang.com/ask/30057/
http://zd.lfang.com/ask/30056/
http://zd.lfang.com/ask/30055/
http://zd.lfang.com/ask/30054/
http://zd.lfang.com/ask/30053/
http://zd.lfang.com/ask/30052/
http://zd.lfang.com/ask/30051/
http://zd.lfang.com/ask/30050/
http://zd.lfang.com/ask/30049/
http://zd.lfang.com/ask/30048/
http://zd.lfang.com/ask/30047/
http://zd.lfang.com/ask/30046/
http://zd.lfang.com/ask/30045/
http://zd.lfang.com/ask/30044/
http://zd.lfang.com/ask/30043/
http://zd.lfang.com/ask/30042/
http://zd.lfang.com/ask/30041/
http://zd.lfang.com/ask/30040/
http://zd.lfang.com/ask/30039/
http://zd.lfang.com/ask/30038/
http://zd.lfang.com/ask/30037/
http://zd.lfang.com/ask/30036/
http://zd.lfang.com/ask/30035/
http://zd.lfang.com/ask/30049/
http://zd.lfang.com/ask/30048/
http://zd.lfang.com/ask/30047/
http://zd.lfang.com/ask/30046/
http://zd.lfang.com/ask/30045/
http://zd.lfang.com/ask/30044/
http://zd.lfang.com/ask/30043/
http://zd.lfang.com/ask/30042/
http://zd.lfang.com/ask/30041/
http://zd.lfang.com/ask/30040/
http://zd.lfang.com/ask/30039/
http://zd.lfang.com/ask/30038/
http://zd.lfang.com/ask/30037/
http://zd.lfang.com/ask/30036/
http://zd.lfang.com/ask/30035/
http://zd.lfang.com/ask/30034/
http://zd.lfang.com/ask/30033/
http://zd.lfang.com/ask/30032/
http://zd.lfang.com/ask/30031/
http://zd.lfang.com/ask/30030/
http://zd.lfang.com/ask/30029/
http://zd.lfang.com/ask/30028/
http://zd.lfang.com/ask/30027/
http://zd.lfang.com/ask/30026/
http://zd.lfang.com/ask/30025/
http://zd.lfang.com/ask/30024/
http://zd.lfang.com/ask/30023/
http://zd.lfang.com/ask/30022/
http://zd.lfang.com/ask/30021/
http://zd.lfang.com/ask/30020/
http://zd.lfang.com/ask/30034/
http://zd.lfang.com/ask/30033/
http://zd.lfang.com/ask/30032/
http://zd.lfang.com/ask/30031/
http://zd.lfang.com/ask/30030/
http://zd.lfang.com/ask/30029/
http://zd.lfang.com/ask/30028/
http://zd.lfang.com/ask/30027/
http://zd.lfang.com/ask/30026/
http://zd.lfang.com/ask/30025/
http://zd.lfang.com/ask/30024/
http://zd.lfang.com/ask/30023/
http://zd.lfang.com/ask/30022/
http://zd.lfang.com/ask/30021/
http://zd.lfang.com/ask/30020/
http://zd.lfang.com/ask/30019/
http://zd.lfang.com/ask/30018/
http://zd.lfang.com/ask/30017/
http://zd.lfang.com/ask/30016/
http://zd.lfang.com/ask/30015/
http://zd.lfang.com/ask/30014/
http://zd.lfang.com/ask/30013/
http://zd.lfang.com/ask/30012/
http://zd.lfang.com/ask/30011/
http://zd.lfang.com/ask/30010/
http://zd.lfang.com/ask/30009/
http://zd.lfang.com/ask/30008/
http://zd.lfang.com/ask/30007/
http://zd.lfang.com/ask/30006/
http://zd.lfang.com/ask/30005/
http://zd.lfang.com/ask/30019/
http://zd.lfang.com/ask/30018/
http://zd.lfang.com/ask/30017/
http://zd.lfang.com/ask/30016/
http://zd.lfang.com/ask/30015/
http://zd.lfang.com/ask/30014/
http://zd.lfang.com/ask/30013/
http://zd.lfang.com/ask/30012/
http://zd.lfang.com/ask/30011/
http://zd.lfang.com/ask/30010/
http://zd.lfang.com/ask/30009/
http://zd.lfang.com/ask/30008/
http://zd.lfang.com/ask/30007/
http://zd.lfang.com/ask/30006/
http://zd.lfang.com/ask/30005/
http://zd.lfang.com/ask/30004/
http://zd.lfang.com/ask/30003/
http://zd.lfang.com/ask/30002/
http://zd.lfang.com/ask/30001/
http://zd.lfang.com/ask/30000/
http://zd.lfang.com/ask/29999/
http://zd.lfang.com/ask/29998/
http://zd.lfang.com/ask/29997/
http://zd.lfang.com/ask/29996/
http://zd.lfang.com/ask/29995/
http://zd.lfang.com/ask/29994/
http://zd.lfang.com/ask/29993/
http://zd.lfang.com/ask/29992/
http://zd.lfang.com/ask/29991/
http://zd.lfang.com/ask/29990/
http://zd.lfang.com/ask/30004/
http://zd.lfang.com/ask/30003/
http://zd.lfang.com/ask/30002/
http://zd.lfang.com/ask/30001/
http://zd.lfang.com/ask/30000/
http://zd.lfang.com/ask/29999/
http://zd.lfang.com/ask/29998/
http://zd.lfang.com/ask/29997/
http://zd.lfang.com/ask/29996/
http://zd.lfang.com/ask/29995/
http://zd.lfang.com/ask/29994/
http://zd.lfang.com/ask/29993/
http://zd.lfang.com/ask/29992/
http://zd.lfang.com/ask/29991/
http://zd.lfang.com/ask/29990/
http://zd.lfang.com/ask/29989/
http://zd.lfang.com/ask/29988/
http://zd.lfang.com/ask/29987/
http://zd.lfang.com/ask/29986/
http://zd.lfang.com/ask/29985/
http://zd.lfang.com/ask/29984/
http://zd.lfang.com/ask/29983/
http://zd.lfang.com/ask/29982/
http://zd.lfang.com/ask/29981/
http://zd.lfang.com/ask/29980/
http://zd.lfang.com/ask/29979/
http://zd.lfang.com/ask/29978/
http://zd.lfang.com/ask/29977/
http://zd.lfang.com/ask/29976/
http://zd.lfang.com/ask/29975/
http://zd.lfang.com/ask/29989/
http://zd.lfang.com/ask/29988/
http://zd.lfang.com/ask/29987/
http://zd.lfang.com/ask/29986/
http://zd.lfang.com/ask/29985/
http://zd.lfang.com/ask/29984/
http://zd.lfang.com/ask/29983/
http://zd.lfang.com/ask/29982/
http://zd.lfang.com/ask/29981/
http://zd.lfang.com/ask/29980/
http://zd.lfang.com/ask/29979/
http://zd.lfang.com/ask/29978/
http://zd.lfang.com/ask/29977/
http://zd.lfang.com/ask/29976/
http://zd.lfang.com/ask/29975/
http://zd.lfang.com/ask/29974/
http://zd.lfang.com/ask/29973/
http://zd.lfang.com/ask/29972/
http://zd.lfang.com/ask/29971/
http://zd.lfang.com/ask/29970/
http://zd.lfang.com/ask/29969/
http://zd.lfang.com/ask/29968/
http://zd.lfang.com/ask/29967/
http://zd.lfang.com/ask/29966/
http://zd.lfang.com/ask/29965/
http://zd.lfang.com/ask/29964/
http://zd.lfang.com/ask/29963/
http://zd.lfang.com/ask/29962/
http://zd.lfang.com/ask/29961/
http://zd.lfang.com/ask/29960/
http://zd.lfang.com/ask/29974/
http://zd.lfang.com/ask/29973/
http://zd.lfang.com/ask/29972/
http://zd.lfang.com/ask/29971/
http://zd.lfang.com/ask/29970/
http://zd.lfang.com/ask/29969/
http://zd.lfang.com/ask/29968/
http://zd.lfang.com/ask/29967/
http://zd.lfang.com/ask/29966/
http://zd.lfang.com/ask/29965/
http://zd.lfang.com/ask/29964/
http://zd.lfang.com/ask/29963/
http://zd.lfang.com/ask/29962/
http://zd.lfang.com/ask/29961/
http://zd.lfang.com/ask/29960/
http://zd.lfang.com/ask/29959/
http://zd.lfang.com/ask/29958/
http://zd.lfang.com/ask/29957/
http://zd.lfang.com/ask/29956/
http://zd.lfang.com/ask/29955/
http://zd.lfang.com/ask/29954/
http://zd.lfang.com/ask/29953/
http://zd.lfang.com/ask/29952/
http://zd.lfang.com/ask/29951/
http://zd.lfang.com/ask/29950/
http://zd.lfang.com/ask/29949/
http://zd.lfang.com/ask/29948/
http://zd.lfang.com/ask/29947/
http://zd.lfang.com/ask/29946/
http://zd.lfang.com/ask/29945/
http://zd.lfang.com/ask/29959/
http://zd.lfang.com/ask/29958/
http://zd.lfang.com/ask/29957/
http://zd.lfang.com/ask/29956/
http://zd.lfang.com/ask/29955/
http://zd.lfang.com/ask/29954/
http://zd.lfang.com/ask/29953/
http://zd.lfang.com/ask/29952/
http://zd.lfang.com/ask/29951/
http://zd.lfang.com/ask/29950/
http://zd.lfang.com/ask/29949/
http://zd.lfang.com/ask/29948/
http://zd.lfang.com/ask/29947/
http://zd.lfang.com/ask/29946/
http://zd.lfang.com/ask/29945/
http://zd.lfang.com/ask/29944/
http://zd.lfang.com/ask/29943/
http://zd.lfang.com/ask/29942/
http://zd.lfang.com/ask/29941/
http://zd.lfang.com/ask/29940/
http://zd.lfang.com/ask/29939/
http://zd.lfang.com/ask/29938/
http://zd.lfang.com/ask/29937/
http://zd.lfang.com/ask/29936/
http://zd.lfang.com/ask/29935/
http://zd.lfang.com/ask/29934/
http://zd.lfang.com/ask/29933/
http://zd.lfang.com/ask/29932/
http://zd.lfang.com/ask/29931/
http://zd.lfang.com/ask/29930/
http://zd.lfang.com/ask/29944/
http://zd.lfang.com/ask/29943/
http://zd.lfang.com/ask/29942/
http://zd.lfang.com/ask/29941/
http://zd.lfang.com/ask/29940/
http://zd.lfang.com/ask/29939/
http://zd.lfang.com/ask/29938/
http://zd.lfang.com/ask/29937/
http://zd.lfang.com/ask/29936/
http://zd.lfang.com/ask/29935/
http://zd.lfang.com/ask/29934/
http://zd.lfang.com/ask/29933/
http://zd.lfang.com/ask/29932/
http://zd.lfang.com/ask/29931/
http://zd.lfang.com/ask/29930/
http://zd.lfang.com/ask/29929/
http://zd.lfang.com/ask/29928/
http://zd.lfang.com/ask/29927/
http://zd.lfang.com/ask/29926/
http://zd.lfang.com/ask/29925/
http://zd.lfang.com/ask/29924/
http://zd.lfang.com/ask/29923/
http://zd.lfang.com/ask/29922/
http://zd.lfang.com/ask/29921/
http://zd.lfang.com/ask/29920/
http://zd.lfang.com/ask/29919/
http://zd.lfang.com/ask/29918/
http://zd.lfang.com/ask/29917/
http://zd.lfang.com/ask/29916/
http://zd.lfang.com/ask/29915/
http://zd.lfang.com/ask/29929/
http://zd.lfang.com/ask/29928/
http://zd.lfang.com/ask/29927/
http://zd.lfang.com/ask/29926/
http://zd.lfang.com/ask/29925/
http://zd.lfang.com/ask/29924/
http://zd.lfang.com/ask/29923/
http://zd.lfang.com/ask/29922/
http://zd.lfang.com/ask/29921/
http://zd.lfang.com/ask/29920/
http://zd.lfang.com/ask/29919/
http://zd.lfang.com/ask/29918/
http://zd.lfang.com/ask/29917/
http://zd.lfang.com/ask/29916/
http://zd.lfang.com/ask/29915/
http://zd.lfang.com/ask/29914/
http://zd.lfang.com/ask/29913/
http://zd.lfang.com/ask/29912/
http://zd.lfang.com/ask/29911/
http://zd.lfang.com/ask/29910/
http://zd.lfang.com/ask/29909/
http://zd.lfang.com/ask/29908/
http://zd.lfang.com/ask/29907/
http://zd.lfang.com/ask/29906/
http://zd.lfang.com/ask/29905/
http://zd.lfang.com/ask/29904/
http://zd.lfang.com/ask/29903/
http://zd.lfang.com/ask/29902/
http://zd.lfang.com/ask/29901/
http://zd.lfang.com/ask/29900/
http://zd.lfang.com/ask/29914/
http://zd.lfang.com/ask/29913/
http://zd.lfang.com/ask/29912/
http://zd.lfang.com/ask/29911/
http://zd.lfang.com/ask/29910/
http://zd.lfang.com/ask/29909/
http://zd.lfang.com/ask/29908/
http://zd.lfang.com/ask/29907/
http://zd.lfang.com/ask/29906/
http://zd.lfang.com/ask/29905/
http://zd.lfang.com/ask/29904/
http://zd.lfang.com/ask/29903/
http://zd.lfang.com/ask/29902/
http://zd.lfang.com/ask/29901/
http://zd.lfang.com/ask/29900/
http://zd.lfang.com/ask/29899/
http://zd.lfang.com/ask/29898/
http://zd.lfang.com/ask/29897/
http://zd.lfang.com/ask/29896/
http://zd.lfang.com/ask/29895/
http://zd.lfang.com/ask/29894/
http://zd.lfang.com/ask/29893/
http://zd.lfang.com/ask/29892/
http://zd.lfang.com/ask/29891/
http://zd.lfang.com/ask/29890/
http://zd.lfang.com/ask/29889/
http://zd.lfang.com/ask/29888/
http://zd.lfang.com/ask/29887/
http://zd.lfang.com/ask/29886/
http://zd.lfang.com/ask/29885/
http://zd.lfang.com/ask/29899/
http://zd.lfang.com/ask/29898/
http://zd.lfang.com/ask/29897/
http://zd.lfang.com/ask/29896/
http://zd.lfang.com/ask/29895/
http://zd.lfang.com/ask/29894/
http://zd.lfang.com/ask/29893/
http://zd.lfang.com/ask/29892/
http://zd.lfang.com/ask/29891/
http://zd.lfang.com/ask/29890/
http://zd.lfang.com/ask/29889/
http://zd.lfang.com/ask/29888/
http://zd.lfang.com/ask/29887/
http://zd.lfang.com/ask/29886/
http://zd.lfang.com/ask/29885/
http://zd.lfang.com/ask/29884/
http://zd.lfang.com/ask/29883/
http://zd.lfang.com/ask/29882/
http://zd.lfang.com/ask/29881/
http://zd.lfang.com/ask/29880/
http://zd.lfang.com/ask/29879/
http://zd.lfang.com/ask/29878/
http://zd.lfang.com/ask/29877/
http://zd.lfang.com/ask/29876/
http://zd.lfang.com/ask/29875/
http://zd.lfang.com/ask/29874/
http://zd.lfang.com/ask/29873/
http://zd.lfang.com/ask/29872/
http://zd.lfang.com/ask/29871/
http://zd.lfang.com/ask/29870/
http://zd.lfang.com/ask/29869/
http://zd.lfang.com/ask/29868/
http://zd.lfang.com/ask/29867/
http://zd.lfang.com/ask/29866/
http://zd.lfang.com/ask/29865/
http://zd.lfang.com/ask/29864/
http://zd.lfang.com/ask/29863/
http://zd.lfang.com/ask/29862/
http://zd.lfang.com/ask/29861/
http://zd.lfang.com/ask/29860/
http://zd.lfang.com/ask/29859/
http://zd.lfang.com/ask/29858/
http://zd.lfang.com/ask/29857/
http://zd.lfang.com/ask/29856/
http://zd.lfang.com/ask/29855/
http://zd.lfang.com/ask/29869/
http://zd.lfang.com/ask/29868/
http://zd.lfang.com/ask/29867/
http://zd.lfang.com/ask/29866/
http://zd.lfang.com/ask/29865/
http://zd.lfang.com/ask/29864/
http://zd.lfang.com/ask/29863/
http://zd.lfang.com/ask/29862/
http://zd.lfang.com/ask/29861/
http://zd.lfang.com/ask/29860/
http://zd.lfang.com/ask/29859/
http://zd.lfang.com/ask/29858/
http://zd.lfang.com/ask/29857/
http://zd.lfang.com/ask/29856/
http://zd.lfang.com/ask/29855/
http://zd.lfang.com/ask/29854/
http://zd.lfang.com/ask/29853/
http://zd.lfang.com/ask/29852/
http://zd.lfang.com/ask/29851/
http://zd.lfang.com/ask/29850/
http://zd.lfang.com/ask/29849/
http://zd.lfang.com/ask/29848/
http://zd.lfang.com/ask/29847/
http://zd.lfang.com/ask/29846/
http://zd.lfang.com/ask/29845/
http://zd.lfang.com/ask/29844/
http://zd.lfang.com/ask/29843/
http://zd.lfang.com/ask/29842/
http://zd.lfang.com/ask/29841/
http://zd.lfang.com/ask/29840/
http://zd.lfang.com/ask/29854/
http://zd.lfang.com/ask/29853/
http://zd.lfang.com/ask/29852/
http://zd.lfang.com/ask/29851/
http://zd.lfang.com/ask/29850/
http://zd.lfang.com/ask/29849/
http://zd.lfang.com/ask/29848/
http://zd.lfang.com/ask/29847/
http://zd.lfang.com/ask/29846/
http://zd.lfang.com/ask/29845/
http://zd.lfang.com/ask/29844/
http://zd.lfang.com/ask/29843/
http://zd.lfang.com/ask/29842/
http://zd.lfang.com/ask/29841/
http://zd.lfang.com/ask/29840/
http://zd.lfang.com/ask/29839/
http://zd.lfang.com/ask/29838/
http://zd.lfang.com/ask/29837/
http://zd.lfang.com/ask/29836/
http://zd.lfang.com/ask/29835/
http://zd.lfang.com/ask/29834/
http://zd.lfang.com/ask/29833/
http://zd.lfang.com/ask/29832/
http://zd.lfang.com/ask/29831/
http://zd.lfang.com/ask/29830/
http://zd.lfang.com/ask/29829/
http://zd.lfang.com/ask/29828/
http://zd.lfang.com/ask/29827/
http://zd.lfang.com/ask/29826/
http://zd.lfang.com/ask/29825/
http://zd.lfang.com/ask/29839/
http://zd.lfang.com/ask/29838/
http://zd.lfang.com/ask/29837/
http://zd.lfang.com/ask/29836/
http://zd.lfang.com/ask/29835/
http://zd.lfang.com/ask/29834/
http://zd.lfang.com/ask/29833/
http://zd.lfang.com/ask/29832/
http://zd.lfang.com/ask/29831/
http://zd.lfang.com/ask/29830/
http://zd.lfang.com/ask/29829/
http://zd.lfang.com/ask/29828/
http://zd.lfang.com/ask/29827/
http://zd.lfang.com/ask/29826/
http://zd.lfang.com/ask/29825/
http://zd.lfang.com/ask/29824/
http://zd.lfang.com/ask/29823/
http://zd.lfang.com/ask/29822/
http://zd.lfang.com/ask/29821/
http://zd.lfang.com/ask/29820/
http://zd.lfang.com/ask/29819/
http://zd.lfang.com/ask/29818/
http://zd.lfang.com/ask/29817/
http://zd.lfang.com/ask/29816/
http://zd.lfang.com/ask/29815/
http://zd.lfang.com/ask/29814/
http://zd.lfang.com/ask/29813/
http://zd.lfang.com/ask/29812/
http://zd.lfang.com/ask/29811/
http://zd.lfang.com/ask/29810/
http://zd.lfang.com/ask/29824/
http://zd.lfang.com/ask/29823/
http://zd.lfang.com/ask/29822/
http://zd.lfang.com/ask/29821/
http://zd.lfang.com/ask/29820/
http://zd.lfang.com/ask/29819/
http://zd.lfang.com/ask/29818/
http://zd.lfang.com/ask/29817/
http://zd.lfang.com/ask/29816/
http://zd.lfang.com/ask/29815/
http://zd.lfang.com/ask/29814/
http://zd.lfang.com/ask/29813/
http://zd.lfang.com/ask/29812/
http://zd.lfang.com/ask/29811/
http://zd.lfang.com/ask/29810/
http://zd.lfang.com/ask/29809/
http://zd.lfang.com/ask/29808/
http://zd.lfang.com/ask/29807/
http://zd.lfang.com/ask/29806/
http://zd.lfang.com/ask/29805/
http://zd.lfang.com/ask/29804/
http://zd.lfang.com/ask/29803/
http://zd.lfang.com/ask/29802/
http://zd.lfang.com/ask/29801/
http://zd.lfang.com/ask/29800/
http://zd.lfang.com/ask/29799/
http://zd.lfang.com/ask/29798/
http://zd.lfang.com/ask/29797/
http://zd.lfang.com/ask/29796/
http://zd.lfang.com/ask/29795/
http://zd.lfang.com/ask/29794/
http://zd.lfang.com/ask/29793/
http://zd.lfang.com/ask/29792/
http://zd.lfang.com/ask/29791/
http://zd.lfang.com/ask/29790/
http://zd.lfang.com/ask/29789/
http://zd.lfang.com/ask/29788/
http://zd.lfang.com/ask/29787/
http://zd.lfang.com/ask/29786/
http://zd.lfang.com/ask/29785/
http://zd.lfang.com/ask/29784/
http://zd.lfang.com/ask/29783/
http://zd.lfang.com/ask/29782/
http://zd.lfang.com/ask/29781/
http://zd.lfang.com/ask/29780/
http://zd.lfang.com/ask/29794/
http://zd.lfang.com/ask/29793/
http://zd.lfang.com/ask/29792/
http://zd.lfang.com/ask/29791/
http://zd.lfang.com/ask/29790/
http://zd.lfang.com/ask/29789/
http://zd.lfang.com/ask/29788/
http://zd.lfang.com/ask/29787/
http://zd.lfang.com/ask/29786/
http://zd.lfang.com/ask/29785/
http://zd.lfang.com/ask/29784/
http://zd.lfang.com/ask/29783/
http://zd.lfang.com/ask/29782/
http://zd.lfang.com/ask/29781/
http://zd.lfang.com/ask/29780/
http://zd.lfang.com/ask/29779/
http://zd.lfang.com/ask/29778/
http://zd.lfang.com/ask/29777/
http://zd.lfang.com/ask/29776/
http://zd.lfang.com/ask/29775/
http://zd.lfang.com/ask/29774/
http://zd.lfang.com/ask/29773/
http://zd.lfang.com/ask/29772/
http://zd.lfang.com/ask/29771/
http://zd.lfang.com/ask/29770/
http://zd.lfang.com/ask/29769/
http://zd.lfang.com/ask/29768/
http://zd.lfang.com/ask/29767/
http://zd.lfang.com/ask/29766/
http://zd.lfang.com/ask/29765/
http://zd.lfang.com/ask/29779/
http://zd.lfang.com/ask/29778/
http://zd.lfang.com/ask/29777/
http://zd.lfang.com/ask/29776/
http://zd.lfang.com/ask/29775/
http://zd.lfang.com/ask/29774/
http://zd.lfang.com/ask/29773/
http://zd.lfang.com/ask/29772/
http://zd.lfang.com/ask/29771/
http://zd.lfang.com/ask/29770/
http://zd.lfang.com/ask/29769/
http://zd.lfang.com/ask/29768/
http://zd.lfang.com/ask/29767/
http://zd.lfang.com/ask/29766/
http://zd.lfang.com/ask/29765/
http://zd.lfang.com/ask/29764/
http://zd.lfang.com/ask/29763/
http://zd.lfang.com/ask/29762/
http://zd.lfang.com/ask/29761/
http://zd.lfang.com/ask/29760/
http://zd.lfang.com/ask/29759/
http://zd.lfang.com/ask/29758/
http://zd.lfang.com/ask/29756/
http://zd.lfang.com/ask/29757/
http://zd.lfang.com/ask/29755/
http://zd.lfang.com/ask/29754/
http://zd.lfang.com/ask/29752/
http://zd.lfang.com/ask/29753/
http://zd.lfang.com/ask/29750/
http://zd.lfang.com/ask/29751/
http://zd.lfang.com/ask/29764/
http://zd.lfang.com/ask/29763/
http://zd.lfang.com/ask/29762/
http://zd.lfang.com/ask/29761/
http://zd.lfang.com/ask/29760/
http://zd.lfang.com/ask/29759/
http://zd.lfang.com/ask/29758/
http://zd.lfang.com/ask/29756/
http://zd.lfang.com/ask/29757/
http://zd.lfang.com/ask/29755/
http://zd.lfang.com/ask/29754/
http://zd.lfang.com/ask/29752/
http://zd.lfang.com/ask/29753/
http://zd.lfang.com/ask/29750/
http://zd.lfang.com/ask/29751/
http://zd.lfang.com/ask/29748/
http://zd.lfang.com/ask/29749/
http://zd.lfang.com/ask/29747/
http://zd.lfang.com/ask/29746/
http://zd.lfang.com/ask/29744/
http://zd.lfang.com/ask/29745/
http://zd.lfang.com/ask/29743/
http://zd.lfang.com/ask/29742/

为了避免这种情况,我们还需要重写release方法,拦截对象被释放。重写release方法就是为了保证整个程序都有这个单例对象。

//重写release防止对象被释放,因为对象一旦被释放就再也不能生成了。
- (oneway void)release {

}

 

  6>   除了release方法外,我们还需要重写retain方法。为什么呢?因为我们是单例模式,这个对象只会被创建一次,那么我们就一直让他的引用计数为1,不要增加,不要让其增加。那么我们还需要再重写retainCount方法,返回1就好了。

技术分享
 1 //使单例对象引用计数不增加
 2 -(instancetype)retain {
 3 
 4     return self;
 5 }
 6 
 7 //使单例对象引用计数一致为1
 8 - (NSUInteger)retainCount {
 9 
10     return 1;
11 }
技术分享

 

  7>    allocWithZone release retainCount三者不可缺一。

  8>    单例模式已经基本实现了,最后一步就是我们应该仿照系统实现一个类方法返回我们的单例对象。

注意:如果直接返回对象的话,那么这个对象就会一直为空,所以需要在类方法里调用alloc ini方法。但是每次都调用init方法的话,我们的对象每次都要被初始化,所以要重写init方法,保证这个单例对象只执行一次初始化。为什么不判断对象为空呢?因为调用init的时候要先执行alloc方法。

技术分享
 1 + (instancetype)sharedNetworkTool {
 2     
 3     //直接返回这个对象意味着它一直为空
 4 //    return _networkTool;
 5     return [[self alloc] init];
 6 }
 7 
 8 //每次都调用init方法的话,我们的对象每次都要被初始化,所以要保证init只执行一次
 9 -(instancetype)init {
10     
11     static dispatch_once_t onceToken;
12     dispatch_once(&onceToken, ^{
13         _networkTool = [super init];
14     });
15     return _networkTool;
16 }
技术分享

 

              最后再次验证一下,打印结果如下:

    DHNetworkTool *tool1 = [[DHNetworkTool alloc]init];

    DHNetworkTool *tool2 = [[DHNetworkTool alloc]init];

    DHNetworkTool *tool3 = [DHNetworkTool sharedNetworkTool];

    NSLog(@"\ntool1 = %p\ntool2 = %p\ntool3 = %p",tool1,tool2,tool3);

 

技术分享 

 3.2 ARC下单例模式的实现

  ARC下单例模式的实现相对比较简单,下面就只是展示.m文件部分源码,不做赘述了。

技术分享
 1 static id _instance = nil;
 2 
 3 + (id)allocWithZone:(struct _NSZone *)zone
 4 {
 5     if (_instance == nil) {
 6         static dispatch_once_t onceToken;
 7         dispatch_once(&onceToken, ^{ // 安全(这个代码只会被调用一次)
 8             _instance = [super allocWithZone:zone];
 9         });
10     }
11     return _instance;
12 }
13 
14 - (id)init
15 {
16     static dispatch_once_t onceToken;
17     dispatch_once(&onceToken, ^{
18         _instance = [super init];
19     });
20     return _instance;
21 }
22 
23 + (instancetype)sharedDataTool
24 {
25     return [[self alloc] init];
26 }
技术分享

  最后一点,在公司项目开发过程中我们通常会把单例模式的实现抽取成一个宏,放到.PCH文件中,这样方便项目组中的每个人去使用,再次也做一下抽取和代码的展示吧,可以直接拿到工程中使用。

技术分享
 1 //实现单例设计模式
 2 
 3 // .h文件的实现
 4 #define SingletonH(methodName) + (instancetype)shared##methodName;
 5 
 6 // .m文件的实现
 7 #if __has_feature(objc_arc) // 是ARC
 8 #define SingletonM(methodName)  9 static id _instace = nil; 10 + (id)allocWithZone:(struct _NSZone *)zone 11 { 12 if (_instace == nil) { 13 static dispatch_once_t onceToken; 14 dispatch_once(&onceToken, ^{ 15 _instace = [super allocWithZone:zone]; 16 }); 17 } 18 return _instace; 19 } 20 21 - (id)init 22 { 23 static dispatch_once_t onceToken; 24 dispatch_once(&onceToken, ^{ 25 _instace = [super init]; 26 }); 27 return _instace; 28 } 29 30 + (instancetype)shared##methodName 31 { 32 return [[self alloc] init]; 33 } 34 + (id)copyWithZone:(struct _NSZone *)zone 35 { 36 return _instace; 37 } 38 39 + (id)mutableCopyWithZone:(struct _NSZone *)zone 40 { 41 return _instace; 42 }
43 
44 #else // 不是ARC
45 
46 #define SingletonM(methodName) 47 static id _instace = nil; 48 + (id)allocWithZone:(struct _NSZone *)zone 49 { 50 if (_instace == nil) { 51 static dispatch_once_t onceToken; 52 dispatch_once(&onceToken, ^{ 53 _instace = [super allocWithZone:zone]; 54 }); 55 } 56 return _instace; 57 } 58 59 - (id)init 60 { 61 static dispatch_once_t onceToken; 62 dispatch_once(&onceToken, ^{ 63 _instace = [super init]; 64 }); 65 return _instace; 66 } 67 68 + (instancetype)shared##methodName 69 { 70 return [[self alloc] init]; 71 } 72 73 - (oneway void)release 74 { 75 76 } 77 78 - (id)retain 79 { 80 return self; 81 } 82 83 - (NSUInteger)retainCount 84 { 85 return 1; 86 } 87 + (id)copyWithZone:(struct _NSZone *)zone 88 { 89 return _instace; 90 } 91 92 + (id)mutableCopyWithZone:(struct _NSZone *)zone 93 { 94 return _instace; 95 }
96 
97 #endif


iOS学习总结之ARC和非ARC的单例模式实现

标签:

原文地址:http://blog.csdn.net/pwescool/article/details/51247302

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!