>

IOS设计形式,OC中单例设计格局疏解

- 编辑:大富豪棋牌游戏下载 -

IOS设计形式,OC中单例设计格局疏解

基本概念:

单例设计模式是运用较为普遍,广泛且较为简单的设计模式之一,它的设计原理是

始终返回一个实例,即一个类始终只有一个实例

创建单例设计模式的基本步骤

1:声明一个单例对象的静态实例,并初始化为nil

2:创建一个类的类方法,生成一个该类的实例,当且仅有这个类实例nil时,进行实例化

3:覆盖allocWithZone:方法,确保用户直接分配和初始化的事后,不会产生新的对象

4:实现NSCopying协议,覆盖release,autorelease,retain,retainCount方法,以此确保单例的状态

5:在多线程的环境中,注意要使用@synchronized关键字,确定静态实例被正确和初始化

 

单例的基本实现:

实例,UserContext.h头文件:

 

#import 

@interface UserContext : NSObject 
@property(nonatomic,copy)NSString *name;
@property(nonatomic,copy)NSString *email;

//单例 类方法
 (id)shareUserContext;
@end
UserContext.m实现文件:

 

 

#import "UserContext.h"
//单例对象
static UserContext *sigletonInstance=nil;
@implementation UserContext
//生成单例对象
 (id)shareUserContext{
    @synchronized(self){
    if (sigletonInstance==nil) {
        sigletonInstance=[[[self class] alloc]init];
       }
    }
    return sigletonInstance;
}
//下面的方法确保只有一个实例对象
 (id)allocWithZone:(NSZone *)zone{
    if (sigletonInstance==nil) {
        sigletonInstance=[super allocWithZone:zone];
    }
    return  sigletonInstance;
}
-(id)copyWithZone:(NSZone *)zone{
    return  sigletonInstance;
}
-(id)retain{
     return  sigletonInstance;
}
-(oneway void)release{

}
-(id)autorelease{
    return  sigletonInstance;
}
-(NSUInteger)retainCount{
    return UINT_MAX;
}
@end
main.m测试代码:

 

 

#import 
#import "UserContext.h"
int main(int argc, const char * argv[])
{

    @autoreleasepool {
        UserContext *userContext1=[UserContext shareUserContext];
        UserContext *userContext2=[UserContext shareUserContext];
        UserContext *userContext3=[[UserContext alloc]init];
        UserContext *userContext4=[userContext3 copy];
        [userContext1 release];
        [userContext1 release];
        [userContext1 release];
        [userContext1 release];
        NSLog(@" ");
    }
    return 0;
}
运行截图

 

看上面四个对象的内存地址一样,说明这四个对象为同一个对象。这样就可以实现单例了。

IOS中的单例设计情势,IOS设计形式

  单例设计情势是IOS开采中一种很入眼很常用的一种设计形式。它的筹算原理是无论央求多少次,始终再次来到二个实例,也正是八个类独有一个实例。下边是苹果官方文档中关于单例格局的图片:

图片 1

 

  如图所示,侧边的图是暗中认可的多例形式,只要发送央求去成立对象,就能赢得三个新的对象;而侧面的图是单例情势,发送多个央求创立对象,不过最终回来的始终是同贰个。

  因为创建单例类的实例是在保管未有别的实例的意况下才创设的,何况在程序中使用的长河中向来是同叁个实例,因而单例类能够当作提供二个大局访谈能源的类,比如NSUserDefaults,大家能够透过它存款和储蓄数据,它里面包车型大巴多少就是全局的,无论在哪个类里面操作都是一样的。其它,七个单例类还足避防止调用者复制、保留或释放实例。因而,在支付的工程中得以依赖须求来创造分裂的单例类。

  单例的始建分Non-ARC(非ARC)和ARC GCD,前面一个未来用的可比常见,它保险了线程的云浮,满意了静态深入分析器的供给,还合营了ARC,代码如下:

 (AccountManager *)sharedManager
{
    static AccountManager *sharedAccountManagerInstance = nil;
    static dispatch_once_t predicate;
    dispatch_once(&predicate, ^{
        sharedAccountManagerInstance = [[self alloc] init];
    });
    return sharedAccountManagerInstance;
}

  代码深入分析:

  通过这么些类措施,能够收获当前类的单例对象。

  在点子中先注解了叁个实例,并发轫化为nil,前面的static关键字能够保障只举办一回为nil的操作。dispatch_once_t是二十八线程中的,保障只进行一遍。dispatch_once那几个函数用于检查该代码块是或不是已经被调用过,通过它不仅可以够确认保证块里面早先化的代码仅被运维一回,还可以担保线程的汉中。

  单例的采取非常轻松,能够因而下边包车型地铁类措施来成立任何你想要的单例类,只须求把AccountManager修改为您想要成立类的名称,然后通过下边代码来创建实例就能够:

AccountManager *manager = [AccountManager sharedManager];

单例设计格局是IOS开垦中一种很首要很常用的一种设计情势。它的设计原理是无论乞请多少次,始终重回...

IOS中的单例设计格局

  单例设计格局是IOS开荒中一种很入眼很常用的一种设计格局。它的宏图原理是随意须求多少次,始终再次回到八个实例,相当于二个类唯有八个实例。上边是苹果官方文书档案中有关单例情势的图纸:

图片 2

 

  如图所示,左侧的图是暗中认可的多例方式,只要发送恳求去创建对象,就能够获取多少个新的靶子;而侧边的图是单例方式,发送多个央求创设对象,可是最终回到的一味是同两个。

  因为创立单例类的实例是在确认保障未有别的实例的事态下才创造的,况且在程序中应用的进度中始终是同贰个实例,由此单例类可以作为提供贰个大局访问能源的类,比方NSUserDefaults,大家得以由此它存款和储蓄数据,它当中的数目就是全局的,无论在哪些类里面操作都以一模二样的。别的,八个单例类还是能防卫调用者复制、保留或自由实例。因而,在开拓的工程中可以依据需要来创建区别的单例类。

  单例的始建分Non-ARC(非ARC)和ARC GCD,后面一个今后用的可比分布,它保险了线程的白山,知足了静态深入分析器的渴求,还极其了ARC,代码如下:

 (AccountManager *)sharedManager { static AccountManager *sharedAccountManagerInstance = nil; static dispatch_once_t predicate; dispatch_once(&predicate, ^{ sharedAccountManagerInstance = [[self alloc] init]; }); return sharedAccountManagerInstance; }

  代码深入分析:

  通过那几个类方式,能够拿走当前类的单例对象。

  在议程中先表明了三个实例,并开首化为nil,前面包车型地铁static关键字能够保障只进行叁遍为nil的操作。dispatch_once_t是三十二线程中的,保险只进行二回。dispatch_once那么些函数用于检查该代码块是不是曾经被调用过,通过它不只能够保障块里面开首化的代码仅被运转二次,还是可以确定保证线程的平安。

  单例的采取特别轻巧,能够通过上面包车型客车类措施来成立任何你想要的单例类,只须要把AccountManager修改为您想要创造类的名号,然后通过上边代码来成立实例就可以:

AccountManager *manager = [AccountManager sharedManager];

单例设计方式是IOS开荒中一种很主要很常用的一种设计情势。它的安排原理是随意诉求多少次,始终重回三个实例,也...

单例设计格局是行使较为广阔,广泛且较为轻巧的设计方式之一,它的安排性原理是 始终重临贰个实例,即二个类始终唯有多少个...

本文由大富豪棋牌游戏手机版发布,转载请注明来源:IOS设计形式,OC中单例设计格局疏解