一、什么是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. Linux命令-统计文件中的字节数、字数、行数:wc

    Linux系统中的wc(Word Count)命令的功能为统计指定文件中的字节数.字数.行数,并将统计结果显示输出. 1.命令格式: wc [选项]文件... 2.命令功能: 统计指定文件中的字节数. ...

  2. 细说 ASP.NET控制HTTP缓存[转]

    阅读目录 开始 正常的HTTP请求过程 缓存页的请求过程 缓存页的服务端编程 什么是304应答? 如何编程实现304应答 如何避开HTTP缓存 在上篇博客[细说 ASP.NET Cache 及其高级用 ...

  3. iOS - PairProgramming 结对编程

    1.PairProgramming 结对编程(Pair-Programming)可能是近年来最为流行的编程方式.所谓结对编程,也就是两个人写一个程序,其中,一个人叫 Driver,另一个人叫 Obse ...

  4. mvc中Action前HttpPost的作用

    本文导读:在ASP.NET MVC框架中,为了限制某个action只接受HttpPost的请求,对于HttpGet的请求则提示404找不到页面,可以在action的方法前面加上[HttpPost]属性 ...

  5. razor----js

    <script> $(document).ready(function () { // 2  直接加引号转换 var SpecialAptitude = '@Model.SpecialAp ...

  6. python - multi-mechanize 安装笔记

    1. multi-mechanize 是什么Multi-Mechanize 是一个开源的性能和负载测试框架,它并发运行多个 Python 脚本对网站或者服务生成负载(组合事务).测试输出报告保存为HT ...

  7. PHP采集库-Snoopy.class.php

    Snoopy是一个php类,用来模拟浏览器的功能,可以获取网页内容,发送表单. Snoopy的特点: 1.抓取网页的内容 fetch 2.抓取网页的文本内容 (去除HTML标签) fetchtext ...

  8. Jenkins 使用学习笔记

    3.1    Jenkins安装    2 3.1.1    Jenkins下载    2 3.1.2    Jenkins 安装    2 3.1.3    Jenkins 目录结构    3 3. ...

  9. Fragment里面的ListView的item点击没反应

    近期做一个消息列表,发现fragment的listview载入消息出来后,每条消息都点击不了.经过询问和查下已解决 开发中非经常见的一个问题,项目中的listview不不过简单的文字,经常须要自定义l ...

  10. VS2012插件推荐

    其实Metro的感觉有了,但是这两种配色都不太喜欢..白色太扎眼,黑色太瞎眼……有木有灰色的啊喂(有没有其他主题?看后面↓) 黑色主题绝对是熬夜码农必备……但是十分不适合在白天使用. 下面来分享几个好 ...