单例,即是在整个项目中,这个类的对象只能被初始化一次。
比如系统的通知中心:
[NSNotificationCenter defaultCenter]
那么,单例有什么好处呐?
You obtain the global instance from a singleton class through a factory method. The class lazily creates its sole instance the first time it is requested and thereafter ensures that no other instance can be created. A singleton class also prevents callers from copying, retaining, or releasing the instance. You may create your own singleton classes if you find the need for them. For example, if you have a class that provides sounds to other objects in an application, you might make it a singleton.
简单来说:全局可用,线程安全!
打个比方说:我们有一款播放视频的APP,但是我不能为每一个视频文件都创建一个播放器吧?我们只需要创建一个播放器,去播放我们需要看的视频,而这个播放器就可以称为“单例播放器”,全局可用,保证其唯一性。我们播放其中一个视频的时候,不能同时播放其他视频,线程安全。
那么我们创建单例怎么去创建呐,下面有两种方法:
1:
static NFDbManager *DefaultManager = nil;
+ (NFDbManager *)defaultManager {
if (!DefaultManager) DefaultManager = [[self allocWithZone:NULL] init];
return DefaultManager;
}
2:
+ (NFDbManager *)sharedManager
{
static NFDbManager *sharedAccountManagerInstance = nil;
static dispatch_once_t predicate;
dispatch_once(&predicate, ^{
sharedAccountManagerInstance = [[self alloc] init];
});
return sharedAccountManagerInstance;
}
开发过程中会遇到很多这样全局唯一的,那么我们就可以创建一个单例对象。