当前位置: 首页 > 编程日记 > 正文

懒加载 字典转模型 自定义cell

懒加载:

1>  什么是懒加载?

懒加载又称为延时加载,即在系统调用的时候加载,如果系统不调用则不会加载.所谓的懒加载其实就是重写其 get 方法.

2>  特点:在使用懒加载的时候要先判断该方法是否已经存在,如果不存在则再进行实例化.

3>  优点:

  • 不必将创建对象的方法都写在 viewDidLoad 里面,代码可读性更强.
  • 每个控件的getter 方法分别负责各自的实例化处理,独立性强,耦合性低.

4>  使用步骤:

  • 声明一个属性.该属性可以是私有属性也可以是在. h 文件中声明的属性.懒加载的对象是一个属性.
  • 在.m 中的 viewDidLoad外面重写懒加载,即重写其 getter 方法
  • 先判断 _对象 是否存在,如果不存在则,在 if 中实例化属性对象,并设置对象的属性,并添加其特有的方法
  • 返回 _对象

字典转模型

1>   什么是字典转模型?

字典数据/数组(可以是 plist 文件中的数据也可以是网络后台的数据等)转化为模型对象/数组.

2>   注意

模型要提供可以传入字典参数的构造方法.(一个对象方法一个类方法)

- (instancetype)initWithDict:(NSDictionary *)dict;

+ (instancetype)xxxWithDict:(NSDictionary *)dict;

3>   提示:在模型中尽量的使用自读属性可以进一步降低代码的耦合性

4>   优点:

  • 将字典中的数据封装到一个模型类中,有 MVC 框架思想的优点,可以降低耦合性
  • 所有的字典转模型可以写在一处,便于管理,同时也可以降低代码的出错率
  • 字典转模型后,直接把字典中的数据转移到模型的属性中,外界可以直接调用模型的属性来获取数据,从而可以提高代码的编码效率
  • 由于模型是一个单独的类中进行的,外界不用关心类中的细节,只要使用就可以,更好的体现了面向对象的思想.

5>   使用步骤

  • 在模型的.h 文件中声明所需要的所有属性
  • 在模型的.h实例化两个方法

- (instancetype)initWithDict:(NSDictionary *)dict;

+ (instancetype)appInfoWithDict:(NSDictionary *)dict;

  • 在模型的.m 文件中,通过实现两个方法获取数据

- (instancetype)initWithDict:(NSDictionary *)dict{

self = [super init];

if (self) {//给声明的属性赋值

self.name = dict[@"name"];

self.icon = dict[@"icon"];

}

return self;

}

+ (instancetype)appInfoWithDict:(NSDictionary *)dict{

return [[self alloc] initWithDict:dict];

}

  • 声明要空控件的属性,并懒加载中直接实例化赋值
  • 在 VC 的. m 文件中声明一个目标控件的属性
  • 懒加载控件,并在懒加载的判断为空的时候,通过 bundle à path à 通过 path 路径把数据转到模型(数组)中 à 创建一个临时可变数组(用于盛放数据) à 遍历通过路径获取的数据 à 给临时数组赋值 à 将临时数组赋值给模型对象

自定义 cell

1>  什么是自定义 cell

自定义 cell 即 tableView,collectionView,scrollView中的 cell 使用的时候不能满足我们使用 cell 的需求,需要自己定义一个 cell.

2>  优点:

  • 自定义 cell 是继承自系统的 cell, 因此它具有系统 cell 的所有的属性和方法
  • 自定义 cell 可以在自定义的类中扩展属性和方法,供外界使用.

3>  使用方法

自定义 cell 的方法有三种

  • 纯代码

1 在自定义 cell 类的.h 文件中声明要增加的属性和方法

2 在自定义cell 类的.m 文件中实现增加的方法.

该类的构造方法 initWithStyle:--- reuseIdentify 方法

调用父类的构造方法

判断 self是否存在

返回 self

3 在 VC 中的数据源方法中的第三个方法中将系统的 cell 换成自定义的 cell 的类即可拥有自定义 cell 扩展的属性和方法.

先创建一个 static 的重用标示符,然后通过重用标示符去重用池中寻找,假如通过重用标示符找不到 cell 则通过自定义的 cell 创建 cell, 最后返回 cell.

  • Xib

实现步骤:

1 创建一个类 继承自 UITableViewCell/

UICollectionViewCell/UIScrollViewCell

2 创建一个和步骤一同名的 xib

3 将一个 cell拖到xib窗口中,并在属性检查器上

(1)修改Custom Class为 创建从类名

(2)设定其重用标识符(Identifier),该重用标示符要和 VC 中定义的重用标示符一样.

4 在 xib 中进行布局

5 将 xib 中的控件拖线到cell上

6 使用的时候,和纯代码使用类似,只是将创建 cell 的方法改用为 xib 的方法

  • storyboard

该方法是最简单的一种方法,但缺点也很多,在开发中基本上用不到,思路就是在storyboard的 cell 中直接操作.

转载于:https://www.cnblogs.com/ansyxpf/p/5494240.html

相关文章:

SQL GROUP BY 语句

合计函数 (比如 SUM) 常常需要添加 GROUP BY 语句。 GROUP BY 语句 GROUP BY 语句用于结合合计函数,根据一个或多个列对结果集进行分组。 SQL GROUP BY 语法 SELECT column_name, aggregate_function(column_name) FROM table_name WHERE column_name operator valu…

docker如何push镜像到docker hub个人的仓库

docker如何push镜像到docker hub个人的仓库 step1——找到本地镜像的ID&#xff1a;docker imagesstep2——登陆Hub&#xff1a;docker login --usernameusername --passwordpassword --emailemailstep3——tag&#xff1a;docker tag <imageID> <namespace>/<…

博客开通第一天,加油

博客开通第一天&#xff0c;加油转载于:https://www.cnblogs.com/tianyang01/p/5499881.html

【iOS 开发】iOS 10.3 如何更换 app 图标

2017-04-06 KyrieXu Cocoa开发者社区iOS 10.3 开放了更换 app 图标的 API&#xff0c;核心方法是下面这个&#xff1a; func setAlternateIconName(_ alternateIconName: String?, completionHandler: ((Error?) -> Void)? nil) 这是官方文档&#xff0c;但是你还需要在…

WordPress qTranslate插件跨站请求伪造漏洞

漏洞名称&#xff1a;WordPress qTranslate插件跨站请求伪造漏洞CNNVD编号&#xff1a;CNNVD-201306-058发布时间&#xff1a;2013-06-07更新时间&#xff1a;2013-06-07危害等级&#xff1a; 漏洞类型&#xff1a;跨站请求伪造威胁类型&#xff1a;远程CVE编号&#xff1a;CV…

ESXi6.5环境搭建(一:VMware Workstations 12 Pro 环境的安装及配置)

实验目的及要求 完成VMware workstations安装&#xff0c;会应用相关操作&#xff1b;完成虚拟机中ESXI6.5平台的安装及网络环境配置&#xff1b;完成VMware vSphere Client 6.0软件在PC端的安装及配置&#xff1b;完成使用浏览器或者VMware vSphere Client 6.0中对ESXI6.5的操…

[vs2008]Visual Studio 2008 SP1添加或删除功能提示查找SQLSysClrTypes.msi文件

前言 今天接到领导布置的一个任务&#xff0c;是之前同事负责的项目。离职了&#xff0c;现在客户有些地方需要修改&#xff0c;由于我之前参与过&#xff0c;就落在我的头上了。 然后我就把代码弄了过来&#xff0c;打开发现其中需要用到水晶报表。&#xff08;我觉得不好用&a…

iOS10.3 的评论系统

作者 xuyafei86 关注 2017.03.30 12:39* 字数 428 阅读 265评论 4喜欢 11iOS10.3 对 App 的评论系统进行了较大的升级。主要在三个方面。 支持 App 内评分 在此之前我们要实现 App 内评分需要使用 SKStoreProductViewController。它只会在 App 内部模态打开在 AppStore 的详情页…

windows 内存泄露和资源泄漏调试

AQTime (有x64、win32的)进行内存泄露和资源泄漏监控http://wenku.baidu.com/view/9aa1c2afdd3383c4bb4cd2c1.html x64下载&#xff1a;http://downlite.net/lp.php?coc&nAutomatedQA.AQTime.v6.21.400.x64.Cracked.WORKING-BRD Windows Leaks Detector&#xff08;好象只…

ESXi6.5环境搭建(二:ESXi 6.5环境的安装及配置)

实验目的及要求 完成VMware workstations安装&#xff0c;会应用相关操作&#xff1b;完成虚拟机中ESXI6.5平台的安装及网络环境配置&#xff1b;完成VMware vSphere Client 6.0软件在PC端的安装及配置&#xff1b;完成使用浏览器或者VMware vSphere Client 6.0中对ESXI6.5的操…

Android自定义ListView的Item无法响应OnItemClick的解决办法

转&#xff1a;如果你的自定义ListViewItem中有Button或者Checkable的子类控件的话&#xff0c;那么默认focus是交给了子控件&#xff0c;而ListView的Item能被选中的基础是它能获取Focus&#xff0c;也就是说我们可以通过将ListView中Item中包含的所有控件的focusable属性设置…

iPA 打包小工具

2017-04-07原文链接&#xff1a;http://icofans.com/2017/04/06/%E6%A1%8C%E9%9D%A2%E6%89%93%E5%8C%85IPA%E5%B0%8F%E7%A8%8B%E5%BA%8F/对项目进行 iPA 打包导出 使用方法&#xff1a;运行后&#xff0c;将项目文件夹拖拽至主界面&#xff0c;此时项目便开始打包。打包完成后会…

ESXi6.5环境搭建(三:vSphere Client6.0安装)

实验目的及要求 完成VMware workstations安装&#xff0c;会应用相关操作&#xff1b;完成虚拟机中ESXI6.5平台的安装及网络环境配置&#xff1b;完成VMware vSphere Client 6.0软件在PC端的安装及配置&#xff1b;完成使用浏览器或者VMware vSphere Client 6.0中对ESXI6.5的操…

JavaScript arguments对象

1、在JavaScript中&#xff0c;arguments对象是比较特别的一个对象&#xff0c;实际上是当前函数的一个内置属性。arguments非常类似Array&#xff0c;但实际上又不是一个Array实例。可以通过如下代码得以证实&#xff08;当然&#xff0c;实际上&#xff0c;在函数funcArg中&a…

iOS开发之 - 好玩的富文本

周末闲着没事&#xff0c;就想着不如把那些容易遗忘的知识点整理一下&#xff0c;一来可以让有需要的朋友少走弯路&#xff0c;二来自己以后再忘记的时候也可以回头看看......但 iOS 中小冷易忘的知识点实在太多了&#xff0c;不知道该从哪里开始整理&#xff0c;“百无聊赖”逛…

sharepoint自带JS函数获取URL参数

GetUrlKeyValue 转载于:https://www.cnblogs.com/bmib/p/3139749.html

ESXi6.5环境搭建(四:虚拟机操作系统安装及配置)

实验目的及要求 完成VMware workstations安装&#xff0c;会应用相关操作&#xff1b;完成虚拟机中ESXI6.5平台的安装及网络环境配置&#xff1b;完成VMware vSphere Client 6.0软件在PC端的安装及配置&#xff1b;完成使用浏览器或者VMware vSphere Client 6.0中对ESXI6.5的操…

iOS 生成带 logo 的二维码,区域截屏保存至相册(小功能二连发 (一))

原文链接&#xff1a;http://www.jianshu.com/p/36e9f012ef39生成带 logo 的二维码 区域截屏相关 —— 由3033分享开篇 最近项目需要搞了几个相对独立的小功能&#xff0c;今天有空总结一下他们的实现思路和方法&#xff0c;并总结一点项目中帮同事解决的问题&#xff0c;在此立…

JavaScript-学习一全局变量

因为局部变量只作用于函数内&#xff0c;所以不同的函数可以使用相同名称的变量。 局部变量在函数开始执行时创建&#xff0c;函数执行完后局部变量会自动销 不限制位置的 JavaScript 变量生命周期在它声明时初始化。 局部变量在函数执行完毕后销毁。 全局变量在页面关闭后销毁…

Android 4.2真坑爹

艹~~~&#xff0c;Android4.2真坑爹&#xff0c;4.1以前的方法都不能使用了。 操蛋呢。。。转载于:https://www.cnblogs.com/liushuibufu/p/3253611.html

ESXi6.5环境搭建(五:常见问题及解决方案实验总结)

实验目的及要求 完成VMware workstations安装&#xff0c;会应用相关操作&#xff1b;完成虚拟机中ESXI6.5平台的安装及网络环境配置&#xff1b;完成VMware vSphere Client 6.0软件在PC端的安装及配置&#xff1b;完成使用浏览器或者VMware vSphere Client 6.0中对ESXI6.5的操…

《Linux4.0设备驱动开发详解》笔记--第十二章:Linux设备驱动的软件架构思想

待补充转载于:https://www.cnblogs.com/zcjboke/p/5513130.html

iOS_Development~ 添加 / 隐藏 UITabBar 右上角的小红点

原文链接&#xff1a;http://www.jianshu.com/p/de72118a49ad添加 / 隐藏 UITabBar 右上角的小红点 —— 由anticipate_91分享添加/隐藏UITabBar右上角的小红点 话不多说&#xff0c;直接上代码吧&#xff01; 1.添加tabBar的小红点 /** 添加tabBar的小红点* index&#xff1…

解决ubuntu上opengl的问题

装完ubuntu之后&#xff0c;对于opengl的程序总是出现问题&#xff0c;先将解决方案列出如下&#xff1a; http://www.linuxforums.org/forum/ubuntu-linux/175490-graphics-driver-problem.html http://superuser.com/questions/484991/nvidia-graphics-driver-in-ubuntu-12-0…

OpenStack环境搭建(一:Virtual Box 5.1 环境的安装及配置)

实验要求&#xff1a; 完成Virtual box平台安装&#xff0c;会应用相关操作&#xff1b;在virtual box虚拟平台上部署Fuel Master节点&#xff1b;在virtual box虚拟平台上部署计算节点Computer&#xff1b;在virtual box虚拟平台上部署控制节点Controller&#xff1b;在web控…

[转载]SSH框架搭建详细图文教程

什么是SSH? SSH对应 struts spring hibernatestruts 采用MVC模式&#xff0c;主要是作用于用户交互spring 采用IOC和AOP~作用比较抽象&#xff0c;是用于项目的松耦合hibernate 是对象持久化框架&#xff0c;其实就是实体类和数据库表建立关系&#xff0c;操作类就会触发相应的…

iOS 开发之 pdf 文档的加载与浏览的 4 种方式

原文链接&#xff1a;http://www.jianshu.com/p/1d4305a02ea5在我们的开发中&#xff0c;有些像电子书类型的 app 的开发会涉及到 pdf 文档的加载与展示。由于笔者项目中正好涉及到这块&#xff0c;于是将 pdf 常用的几种加载方式做个总结。以供后面可能用到的同学做个参考。 —…

利用三个点(trsf)来实现各种规则图形的实现

在Val3,是使用trsf(x,y,z,rx,ry,rz)来实现三维空间点的位置与方向。其中第一点和第二点位置很重要&#xff0c;第三点是用来确定方向。根据这三个点先确定一个用户坐标系。在这个坐标系中&#xff0c;实现圆&#xff0c;三角形&#xff0c;矩形&#xff0c;腰圆&#xff0c;正五…

OpenStack环境搭建(二:Fuel Master的安装及配置)

实验要求&#xff1a; 完成Virtual box平台安装&#xff0c;会应用相关操作&#xff1b;在virtual box虚拟平台上部署Fuel Master节点&#xff1b;在virtual box虚拟平台上部署计算节点Computer&#xff1b;在virtual box虚拟平台上部署控制节点Controller&#xff1b;在web控…

ScratchCardView:刮刮卡视图组件

原文链接&#xff1a;https://github.com/pgorzelany/ScratchCardViewScratchCardView&#xff1a;刮刮卡视图组件。# 为开源点赞# —— 由SwiftLanguage分享Example To run the example project, clone the repo, and run pod install from the Example directory first. Inst…