单例的创建于数据的加载
2015-12-24 22:43
190 查看
#import <UIKit/UIKit.h>
@interface Person : NSObject
// 在这里声明详细信息页面所包含的值对应类型具体值
@property (nonatomic, strong)UIImage *photo;
@property (nonatomic, copy)NSString *name;
@property (nonatomic, copy)NSString *sex;
@property (nonatomic, copy)NSString *address;
@property (nonatomic, copy)NSString *phoneNumber;
@property (nonatomic, copy)NSString *word;
@end
#import "Person.h"
@interface DataHandler : NSObject
@property (nonatomic, strong)NSMutableDictionary *data;
// 单例的第二步:提供一个类方法,返回自身对象
+ (instancetype)shareInstance;
// 添加联系人
- (void)addPerson:(Person *)p;
// 返回所有的分组头即返回字典对应的所有的key值
- (NSArray *)SortedKeys;
// 从数据源中读取出所有的联系人信息
- (void)loadData;
@end
// 单例的第一步: 创建静态的自身的对象 (目的是保证实例变量在内存中存在的时间足够长)
static DataHandler *handler = nil;
@implementation DataHandler
+ (instancetype)shareInstance {
// 这个方法是为了创建一个handler
if (handler == nil) {
handler = [[DataHandler alloc] init];
}
return handler;
}
// 懒加载
- (NSMutableDictionary *)data {
// 这个方法是为了避免在程序刚开始运行的时候就加载太多的东西,只有当程序运行到需求位置的时候在进行加载或初始化,这样避免卡机,加快程序的运行
if (!_data) {
_data = [NSMutableDictionary dictionary];
}
return _data;
}
// 添加联系人
- (void)addPerson:(Person *)p {
// 首先获取名字的拼音的首字母并将它作为key值
NSString *key = [p.name uppercasePinYinFirstLetter];
// 利用获取的key值去取字典中对应的数值
NSMutableArray *array = self.data[key];
if (!array) {
// 如果字典中不存在对应的数值即不存在与key对应的值则进行创建
array = [NSMutableArray array];
}
// 将创建的Person添加进去
[array addObject:p];
// 重置键值对 (防止原先字典中不存在这个键值对,为其添加上去)
[self.data setObject:array forKey:key];
}
// 返回所有的分组头
- (NSArray *)SortedKeys {
// 获取所有的key值
NSArray *array = [self.data allKeys];
// 将获取的所有的key值进行排序并将其返回
return [array sortedArrayUsingSelector:@selector(compare:)];
}
// 从数据源中吧所有的联系人的信息读取出来
- (void)loadData {
// 首先绑定一个本地的name.txt文件路径
NSString *path = [[NSBundle mainBundle] pathForResource:@"name" ofType:@"txt"];
// 把文件的内容读取出来
// 把文件内容读成字符串 指定文件的编码(UTF8)encoding:NSUTF8StringEncoding
NSString *str = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil];
// 首先根据回车键来获得联系人的信息
NSArray *modelArray = [str componentsSeparatedByString:@"\n"];
// 遍历整个modelArray
for (NSString *personString in modelArray) {
// 根据“-”来截取字符串分别放入对应的分组中
NSArray *proArray = [personString componentsSeparatedByString:@"-"];
// 拼接model类
Person *p = [[Person alloc] init];
// 将获取对应数组中的元素赋值到对应的model值中
p.name = proArray[0];
p.photo = [UIImage imageNamed:[NSString stringWithFormat:@"%@.jpg", proArray[0]]];
p.sex = proArray[1];
p.phoneNumber = proArray[2];
p.address = proArray[3];
p.word = proArray[4];
// 将model类添加到data中
[self addPerson:p];
}
}
@interface Person : NSObject
// 在这里声明详细信息页面所包含的值对应类型具体值
@property (nonatomic, strong)UIImage *photo;
@property (nonatomic, copy)NSString *name;
@property (nonatomic, copy)NSString *sex;
@property (nonatomic, copy)NSString *address;
@property (nonatomic, copy)NSString *phoneNumber;
@property (nonatomic, copy)NSString *word;
@end
#import "Person.h"
@interface DataHandler : NSObject
@property (nonatomic, strong)NSMutableDictionary *data;
// 单例的第二步:提供一个类方法,返回自身对象
+ (instancetype)shareInstance;
// 添加联系人
- (void)addPerson:(Person *)p;
// 返回所有的分组头即返回字典对应的所有的key值
- (NSArray *)SortedKeys;
// 从数据源中读取出所有的联系人信息
- (void)loadData;
@end
// 单例的第一步: 创建静态的自身的对象 (目的是保证实例变量在内存中存在的时间足够长)
static DataHandler *handler = nil;
@implementation DataHandler
+ (instancetype)shareInstance {
// 这个方法是为了创建一个handler
if (handler == nil) {
handler = [[DataHandler alloc] init];
}
return handler;
}
// 懒加载
- (NSMutableDictionary *)data {
// 这个方法是为了避免在程序刚开始运行的时候就加载太多的东西,只有当程序运行到需求位置的时候在进行加载或初始化,这样避免卡机,加快程序的运行
if (!_data) {
_data = [NSMutableDictionary dictionary];
}
return _data;
}
// 添加联系人
- (void)addPerson:(Person *)p {
// 首先获取名字的拼音的首字母并将它作为key值
NSString *key = [p.name uppercasePinYinFirstLetter];
// 利用获取的key值去取字典中对应的数值
NSMutableArray *array = self.data[key];
if (!array) {
// 如果字典中不存在对应的数值即不存在与key对应的值则进行创建
array = [NSMutableArray array];
}
// 将创建的Person添加进去
[array addObject:p];
// 重置键值对 (防止原先字典中不存在这个键值对,为其添加上去)
[self.data setObject:array forKey:key];
}
// 返回所有的分组头
- (NSArray *)SortedKeys {
// 获取所有的key值
NSArray *array = [self.data allKeys];
// 将获取的所有的key值进行排序并将其返回
return [array sortedArrayUsingSelector:@selector(compare:)];
}
// 从数据源中吧所有的联系人的信息读取出来
- (void)loadData {
// 首先绑定一个本地的name.txt文件路径
NSString *path = [[NSBundle mainBundle] pathForResource:@"name" ofType:@"txt"];
// 把文件的内容读取出来
// 把文件内容读成字符串 指定文件的编码(UTF8)encoding:NSUTF8StringEncoding
NSString *str = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil];
// 首先根据回车键来获得联系人的信息
NSArray *modelArray = [str componentsSeparatedByString:@"\n"];
// 遍历整个modelArray
for (NSString *personString in modelArray) {
// 根据“-”来截取字符串分别放入对应的分组中
NSArray *proArray = [personString componentsSeparatedByString:@"-"];
// 拼接model类
Person *p = [[Person alloc] init];
// 将获取对应数组中的元素赋值到对应的model值中
p.name = proArray[0];
p.photo = [UIImage imageNamed:[NSString stringWithFormat:@"%@.jpg", proArray[0]]];
p.sex = proArray[1];
p.phoneNumber = proArray[2];
p.address = proArray[3];
p.word = proArray[4];
// 将model类添加到data中
[self addPerson:p];
}
}
相关文章推荐
- UVA(木块问题)101
- 读书笔记之101个脚本之No.4
- 读书笔记--101个shell脚本--05
- 读书笔记之101个脚本之No.7
- 读书笔记之101个脚本之No.8
- 读书笔记--101个shell脚本 之#9
- 读书笔记--101个shell脚本 之#10
- 读书笔记--101个shell脚本 之#11--炫
- 读书笔记--101个shell脚本 之#12--函数
- 读书笔记--101个shell脚本 之#13--猜数字
- 又见101个shell脚本
- 101个脚本之linux回收站 推荐
- 在第101次的起航时还是要付出点代价
- 网络技术101
- Security 101
- uva 101 The Blocks Problem
- 100、101、104-递归
- sgu 101 Domino【输出欧拉路径】
- 101. Symmetric Tree\104. Maximum Depth of Binary Tree\111. Minimum Depth of Binary Tree
- UVa 101: The Blocks Problem