iOS单列模式
单例模式的意思就是只有一个实例。单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。这个类称为单例类。
1.单例模式的要点:
显然单例模式的要点有三个;一是某个类只能有一个实例;二是它必须自行创建这个实例;三是它必须自行向整个系统提供这个实例。
2.单例模式的优点:
----------------------------Singleton.h文件------
#import <Foundation/Foundation.h>
@interface Singleton : NSObject
//步骤一
@property(nonatomic,strong)NSDictionary *singDict;//全局单列字典
@property(nonatomic,strong)NSMutableArray *singArray;//全局数组
+(Singleton *)shareData; //步骤二
@end
----------------------------Singleton.m文件------
#import "Singleton.h"
@implementation Singleton
staticSingleton *singletonData =nil; //步骤三
//步骤四
+(Singleton *)shareData{
staticdispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
// 在这里初始化
singletonData = [[Singletonalloc]init];
singletonData.singArray=[NSMutableArrayarray];
singletonData.singDict=[NSDictionarydictionary];
});
returnsingletonData;
}
//步骤五
-(id)init {
if (self = [superinit]) {
}
return self;
}
这就写好一个单列了,是不是很简单
下面是使用单列的方法------------------------------
//单列类
导入#import "Singleton.h"
@interface HomeViewController ()
{
Singleton *_oneS;//单列
}
_oneS=[SingletonshareData];//初始化单列
一、 然后可以在需啊的时候,vc1里面把模型添加到单列数组里面
[_oneS.singArrayaddObject:homeg];
二、在需要的时候,vc2可以加载取出单列数组
@property (nonatomic,strong)NSMutableArray *addMuToArray;
Singleton *oneS=[SingletonshareData];
_addMuToArray=[NSMutableArrayarray];
for (int i=0; i<oneS.singArray.count; i++) {
HomeGoods *homeG=oneS.singArray[i];//1、把单列数组取出到模型
NSMutableDictionary *dict=[NSMutableDictionarydictionary];
[dict setObject:homeG.goodsNameforKey:@"nameStr"];
[dict setObject:homeG.goodsPriceforKey:@"price"];
[dict setObject:homeG.goodsImgurlforKey:@"imgurl"];
[dict setObject:[NSStringstringWithFormat:@"%ld",homeG.goodsNum]forKey:@"number"];
[_addMuToArrayaddObject:dict];//2、把模型添加到可变数组中
}
// 3、再次把数组存到全局单列字典中
NSMutableDictionary *dict=[[NSMutableDictionaryalloc]init];
[dict setObject:_addMuToArrayforKey:@"model"];
oneS.singDict=[dict copy];
三、在需要的时候,vc3可以加载取出单列字典if ([SingletonshareData].singDict.count!=0) {
NSArray *array;
array=[SingletonshareData].singDict[@"model"];
for (NSDictionary *itemin array) {
CartModel *clm=[[CartModelalloc]init];
clm.nameStr=[itemobjectForKey:@"nameStr"];
clm.price=[itemobjectForKey:@"price"];
clm.imgUrl = item[@"imgurl"];
clm.number = [item[@"number"]integerValue];
[_dataArrayaddObject:clm];
}
}
@end
是不是很简单,如果有帮助就帮忙顶一下