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

IOS开发模式——单例

时间:2014-05-27 15:59:11      阅读:309      评论:0      收藏:0      [点我收藏+]

标签:style   c   class   blog   code   java   

  单例的模式在网上有很多,今天发下我个人对单例模式的理解。整个app中只存在一个实例,也只会进行一次实例,在实例完成之后是不可以人释放的(当App关闭之后,等系统自己回收)。

也就是说,如果我们写得某个类符合了上述条件,那么我们也可以称这个类为单例。

  在非ARC的工程中,我们需要针对alloc,retain,copy等会增加retaincount的参数加以控制,对release和autorelease等减少retailcount的操作增加控制,以确保单一实例,绝不释放。  

  在ARC的工厂中,由于,内存管理是有系统来完成的,确切的说单例是不存在的,以为在内存吃紧的情况下,系统会回收,这样造成,可能重复实例。这样的话,你之前实例里面保存的数据就会丢失,所以说不存在。(个人理解)

  下面来分享下我是如何做单例的

非ARC单例:

 

bubuko.com,布布扣
#import <Foundation/Foundation.h>

@interface BaseSingle : NSObject

+(id)getInstance;

@end
bubuko.com,布布扣

.m文件中,重写方法增加控制

bubuko.com,布布扣
#import "BaseSingle.h"

@implementation BaseSingle

+(id)getInstance{
    return nil;
}

+(id)allocWithZone:(struct _NSZone *)zone{
    return [[self getInstance] retain];
}

-(id)copyWithZone:(struct _NSZone *)zone{
    return self;
}

-(id)retain{
    return self;
}

-(NSUInteger)retainCount{
    return NSUIntegerMax;
}

-(oneway void)release{
    return;
}

-(id)autorelease{
    return self;
}
bubuko.com,布布扣

然后我们调用的时候继承下BaseSingle 重写 getInstance方法。

例如:其中FileDownLoadManager 继承 BaseSingle

bubuko.com,布布扣
+(FileDownLoadManager *)getInstance{
    static FileDownLoadManager * shareFileDownLoadManager = nil;
    @synchronized(self){
        if (shareFileDownLoadManager == nil) {
            shareFileDownLoadManager = [NSAllocateObject([self class], 0, NULL) init];
        }
    }
    return shareFileDownLoadManager;
}
bubuko.com,布布扣

这样一个妥妥的单例就完成了。

ARC单例:

  关于ARC单例就不在这里赘述了,相信大家都懂了。。。嘿嘿

 

 

 

 

IOS开发模式——单例,布布扣,bubuko.com

IOS开发模式——单例

标签:style   c   class   blog   code   java   

原文地址:http://www.cnblogs.com/ggxbq/p/3753255.html

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