一、什么是plist文件

1>将数据直接写在代码里面,不是一种合理的做法。如果数据经常修改,就要经常翻开对应的代码进行修改,造成代码扩展性低

2>因此,可以考虑将经常变得数据放在文件中进行存储,程序启动后从文件中读取最新的数据。如果要变动数据,直接修改数据文件即可,不用修改代码

3>一般可以使用属性列表文件存储NSArray或者NSDictionary之类的数据,这种“属性列表文件”的扩展名是plist,因此也成为“plist文件”

二、创建plist文件

三、解析plist文件

代码实例:

   // 一个NSBundle对象对应一个资源包(图片、音频、视频、plis等文件)
// NSBundle的作用:用来访问与之对应的资源包内部的文件,可以用来获得文件的全路径
// 项目中添加的资源都会被添加到主资源包中
// [NSBundle mainBundle]关联的就是项目的主资源包
NSBundle *bundle = [NSBundle mainBundle];
NSString *file = [bundle pathForResource:@"things" ofType:@"plist"];
self.things = [NSArray arrayWithContentsOfFile:file];

四、plist文件的使用注意

1>plist的文件名不能叫做"info"、"Info"之类的

2>添加plist等文件资源的时候,一定要勾选下面的选项

如果遇到忘了勾选的情况,可以用一下方式解决

五、懒加载

1>为什么用到懒加载

  加载plist等文件数据,加载数据用懒加载,如果一上来就将所有数据都加载,第一影像程序性能,第二,加载的数据本次操作不一定能用上,浪费内存--懒加载的本质就是重写getter方法,也就是使用数据的时候才进行加载!

2>代码实例--之前是在viewDidLoad方法中获取的数据,不管用不用到都要加载。以下方法是在用到时再加载

@property (strong, nonatomic) NSArray *things; // 重写get方法,实现懒加载

 // 重写things的get方法,实现懒加载
- (NSArray *)things
{
if (_things == NULL) {
// 加载主资源包
NSBundle *bundle = [NSBundle mainBundle];
// 通过主资源包获取things.plist的全路径
NSString *file = [bundle pathForResource:@"things" ofType:@"plist"];
// 通过全路径获取数据
_things = [NSArray arrayWithContentsOfFile:file];
}
return _things;
}

六、模型--模型取代字典

1>模型的本质就是直接继承NSObject的类文件

2>字典转模型的过程最好封装在模型内部,模型中的属性对应字典的哪个key值,模型说的算,外部不要干涉,外部只管调用模型的构造方法获取模型

3>模型应该提供一个可以传入字典参数的构造方法,一个类方法,一个对象方法

  - (instancetype)initWithDict:(NSDictionary *)dict;
  + (instancetype)xxxWithDict:(NSDictionary *)dict;
4>代码实例:
  模型的声明部分:
 //  ShopModel.h
// UIView练习
//
// Created by admin on 16/3/5.
// Copyright © 2016年 admin. All rights reserved.
// 商品模型 #import <Foundation/Foundation.h> @interface ShopModel : NSObject
/** 商品名称 */
@property(nonatomic,strong) NSString *name;
/** 商品图片 */
@property(nonatomic,strong) NSString *icon; - (instancetype)initWithDic:(NSDictionary *)dic;
+ (instancetype)shopModelWithDic:(NSDictionary *)dic;
@end

  模型的实现部分:

 //  ShopModel.m
// UIView练习
//
// Created by admin on 16/3/5.
// Copyright © 2016年 admin. All rights reserved.
// #import "ShopModel.h" @implementation ShopModel - (instancetype)initWithDic:(NSDictionary *)dic
{
if (self = [super init])
{
self.name = dic[@"name"];
self.icon = dic[@"icon"];
}
return self;
} +(instancetype)shopModelWithDic:(NSDictionary *)dic
{
return [[self alloc] initWithDic:dic];
}
@end

5>懒加载+模型

之前的懒加载代码,得到的数据是字典的集合,下面的代码是在懒加载的过程中实现了字典转换模型

 // 重写things的get方法,实现懒加载
- (NSArray *)things
{
if (_things == NULL) {
// 加载主资源包
NSBundle *bundle = [NSBundle mainBundle];
// 通过主资源包获取things.plist的全路径
NSString *file = [bundle pathForResource:@"things" ofType:@"plist"];
// 通过全路径获取数据
_things = [NSArray arrayWithContentsOfFile:file]; // 思路:数据的get方法,直接返回模型的集合,遍历字典数组,将字典的数据在懒加载过程中都转化成模型数据
NSMutableArray *arrTemp = [NSMutableArray array]; // 定义可变数组
for (NSDictionary *dic in _things) {
[arrTemp addObject:[ShopModel shopModelWithDic:dic]];
}
_things = arrTemp; // 将装有的模型集合赋值给成员变量
}
return _things;
}

七、补充instancetype

1>instancetype在类型表示上,跟id一样,可以表示任何对象类型

2>instancetype只能用在返回值类型上,不能像id一样用在参数类型上

3>instancetype比id多一个好处:编译器会检测instancetype的真实类型

iOS边练边学--plist文件,懒加载,模型初使用--补充instancetype的更多相关文章

  1. iOS开发基础-图片切换(4)之懒加载

    延续:iOS开发基础-图片切换(3),对(3)里面的代码用懒加载进行改善. 一.懒加载基本内容 懒加载(延迟加载):即在需要的时候才加载,修改属性的 getter 方法. 注意:懒加载时一定要先判断该 ...

  2. iOS开发基础-图片切换(2)之懒加载

    延续:iOS开发基础-图片切换(1),对(1)里面的代码进行改善. 在 ViewController 类中添加新的数组属性:  @property (nonatomic, strong) NSArra ...

  3. iOS边练边学--xib文件初使用

    一.Xib和storyboard对比 *共同点: 1>都用来描述软件界面 2>都用Interface Builder工具来编辑 3>本质都是转换成代码去创建控件 *不同点 1> ...

  4. iOS Interface Builder:在.xib文件中加载另一个.xib文件

    在开发中,经常会用到一个需要重复使用的模块,比如好友列表中每个用户的展示或每条动态,这些都是相同的模版,这样我们就可以把这个部分提取出来放到一个单独的.xib中.那么提取出的.xib如何在其他.xib ...

  5. [IOS 开发] 懒加载 (延迟加载) 的基本方式,好处,代码示例

    懒加载的好处: 1> 不必将创建对象的代码全部写在viewDidLoad方法中,代码的可读性更强 2> 每个属性的getter方法中分别负责各自的实例化处理,代码彼此之间的独立性强,松耦合 ...

  6. iOS 懒加载模式

    感谢: chengfang iOS开发-懒加载 1.懒加载--也称为延迟加载,即在需要的时候才加载(效率低,占用内存小).所谓懒加载,写的是其get方法. 注意:如果是懒加载的话则一定要注意先判断是否 ...

  7. ios 懒加载详解

    iOS开发之懒加载 在iOS开发中几乎经常用到懒加载技术,比如我们存放网络数据的数组,控制器的view,控件的自定义,复杂的运算逻辑等等情况下都会用到懒加载技术,那么什么是懒加载呢?? 他又有什么样的 ...

  8. 懒加载--初步理解. by:王朋

    懒加载(LazyLoad),又称为延迟加载. 举个例子,当我们在用网易新闻App时,看着那么多的新闻,并不是所有的都是我们感兴趣的,有的时候我们只是很快的滑过,想要快速的略过不喜欢的内容,但是只要滑动 ...

  9. angular配置懒加载路由的思路

    前言 本人记性不好,对于别人很容易记住的事情,我愣是记不住,所以还是靠烂笔头来帮我长长记性. 参考文章:https://blog.csdn.net/xif3681/article/details/84 ...

随机推荐

  1. 你的Android不好用,都是因为这几点原因

    Android早已是全球最大.用户最多的移动操作系统,不过它离全球最好用还差得很远. 大家随手就能举出些曾经历过的糟心体验,如手机卡顿!电量不禁用!广告弹窗老是出现!不过很少有人会追根寻底的去问为何如 ...

  2. C# -- 等待异步操作执行完成的方式 C# -- 使用委托 delegate 执行异步操作 JavaScript -- 原型:prototype的使用 DBHelper类连接数据库 MVC View中获取action、controller、area名称、参数

    C# -- 等待异步操作执行完成的方式 C# -- 等待异步操作执行完成的方式 1. 等待异步操作的完成,代码实现: class Program { static void Main(string[] ...

  3. PLSQL_统计信息系列07_数据字典统计信息的导出和导入

    2014-05-05 Created By BaoXinjian

  4. hdu 1853 Cyclic Tour 最大权值匹配 全部点连成环的最小边权和

    链接:http://acm.hdu.edu.cn/showproblem.php?pid=1853 Cyclic Tour Time Limit: 1000/1000 MS (Java/Others) ...

  5. SqlServer 获取汉字的拼音首字母

    一.该函数传入字符串,返回数据为:如果为汉字字符,返回该字符的首字母,如果为非汉字字符,则返回本身.二.用到的知识点:汉字对应的UNICODE值,汉字的排序规则.三.数据库函数: CREATE FUN ...

  6. mysql 添加列的索引

    无论哪种模式加入索引.会大幅度增加SELECT速度 索引名:Index_User_Name 栏目名:user_name 索引类型:Nornal 索引方式:BTREE

  7. Jquery 对比 Javascript

    转自 http://www.webhek.com/you-do-not-need-jquery AJAX JSON JQUERY $.getJSON('/my/url', function(data) ...

  8. 统计svn 代码提交情况

    统计svn代码提交,使用工具 statsvn.jar 下载地址:http://sourceforge.net/projects/statsvn/ rem 声明一个时间变量 作为文件名 %time:~, ...

  9. Java的Statement、PreparedStatement、PreparedStatement + 批处理 的区别

    首先来说一下连接了数据库之后执行的sql语句:通常连接了数据库之后,我们就会获得statement 类的对象或者是他的子类的对象(PreparedStatement类),通过这个对象我们就可以利用它提 ...

  10. 关于spring xml文件中的xmlns,xsi:schemaLocation(转)

    使用spring也有一段时间了,配置文件也见了不少了,但是发现配置文件的beans里面有很多链接,一开始也很迷惑,所以抽了一点时间整里了一下. 首先我们看到的一个spring的配置文件大概如下面这个样 ...