UITableViewCell

iOS开发——内存优化

吃可爱长大的小学妹 提交于 2020-08-10 02:16:16
前言: 当app经过一段儿时间的迭代,往往会出现一些性能问题,这时能够协助开发解决这些性能问题也成为我们测试的重要工作。凑巧最近一段时间就一直在协助开发去进行app内存优化。这里整理了一份关于内存优化的心得分享给大家。 目的: 首先我们先要明确我们的目的,在保证程序运行流畅的前提下尽可能的优化使用内存。所以千万不要掉进为了优化而优化的陷阱。程序要先保证能运行,然后再谈良好运转。所以解决问题比较宽泛,必要的时候在交互或者运转机制上小动刀子来保证既能完成任务,程序又能正常运转,不必去对代码进行完全重构。毕竟在优化效率达到上限的时候,只能用时间换空间了。 1. 用ARC管理内存 ARC(Automatic ReferenceCounting, 自动引用计数),它避免了最常见的由于我们忘记释放内存所造成的内存泄露。它自动为你管理retain和release的过程,所以你就不必去手动管理了。编写代码的时候很容易忘掉结尾的release。而ARC会自动在底层为你做这些工作。除了帮你避免内存泄露,ARC还可以帮你提高性能,它能保证释放掉不再需要的对象的内存。 2. 在正确的地方使用 reuseIdentifier 一个开发中常见的错误就是没有给UITableViewCells, UICollectionViewCells设置正确的reuseIdentifier。 为了性能最优化,table

在UITableView中使用自动布局以获取动态单元格布局和可变的行高

限于喜欢 提交于 2020-08-09 16:07:24
问题: 如何在表格视图的 UITableViewCell 使用自动布局,以使每个单元格的内容和子视图确定行高(自身/自动),同时保持流畅的滚动性能? 解决方案: 参考一: https://stackoom.com/question/1Gevp/在UITableView中使用自动布局以获取动态单元格布局和可变的行高 参考二: https://oldbug.net/q/1Gevp/Using-Auto-Layout-in-UITableView-for-dynamic-cell-layouts-variable-row-heights 来源: oschina 链接: https://my.oschina.net/u/4438370/blog/4303573

UI——UITableView的重用机制

时光毁灭记忆、已成空白 提交于 2020-08-08 08:35:28
1、UITableView内部中有两个NSMutableArray:当前显示的cell集合——visiableCells;可重用cell的集合:reusableTableCells; 2、UITableView开始时,visiableCells为空,reusableTableCells为空; 3、tableView显示在屏幕中时,通过下面方法 - (nullable __kindof UITableViewCell *)dequeueReusableCellWithIdentifier:(NSString *)identifier; 获取重用数组中可使用的cell,由于开始时reusableTableCells为空,返回nil。则新创建cell,返回,并添加至visiableCells中; 4、屏幕中可展示的cell为7个,则创建7个cell,添加到visiableCells中;并给cell指定重用标识(identifier),可以为不同显示类型的cell指定不同的标识。 5、当tableView向下拖动时。首先A8显示在屏幕中,先从重用数组reusableTableCells中获取cell,此时reusableTableCells依然为空,所以又重新创建了一个cell,赋给A8,并添加至visiableCells;继续拖动tableView,当A1完全移除屏幕时

iOS开发——内存优化

家住魔仙堡 提交于 2020-08-08 04:56:41
前言: 当app经过一段儿时间的迭代,往往会出现一些性能问题,这时能够协助开发解决这些性能问题也成为我们测试的重要工作。凑巧最近一段时间就一直在协助开发去进行app内存优化。这里整理了一份关于内存优化的心得分享给大家。 目的: 首先我们先要明确我们的目的,在保证程序运行流畅的前提下尽可能的优化使用内存。所以千万不要掉进为了优化而优化的陷阱。程序要先保证能运行,然后再谈良好运转。所以解决问题比较宽泛,必要的时候在交互或者运转机制上小动刀子来保证既能完成任务,程序又能正常运转,不必去对代码进行完全重构。毕竟在优化效率达到上限的时候,只能用时间换空间了。 1. 用ARC管理内存 ARC(Automatic ReferenceCounting, 自动引用计数),它避免了最常见的由于我们忘记释放内存所造成的内存泄露。它自动为你管理retain和release的过程,所以你就不必去手动管理了。编写代码的时候很容易忘掉结尾的release。而ARC会自动在底层为你做这些工作。除了帮你避免内存泄露,ARC还可以帮你提高性能,它能保证释放掉不再需要的对象的内存。 2. 在正确的地方使用 reuseIdentifier 一个开发中常见的错误就是没有给UITableViewCells, UICollectionViewCells设置正确的reuseIdentifier。 为了性能最优化,table

block在iOS开发中的用法解析与底层原理

好久不见. 提交于 2020-08-07 21:36:44
1. 前言 Block :带有自动变量(局部变量)的匿名函数。它是C语言的扩充功能。之所以是拓展,是因为C语言不允许存在这样匿名函数。 1.1 匿名函数 匿名函数是指不带函数名称函数。C语言中,函数是怎样的呢?类似这样: int func(int count); 调用的时候: int result = func(10); func就是它的函数名。也可以通过指针调用函数,看起来没用到函数名: int result = (*funcptr)(10); 实际,在赋值给函数指针时,必须通过函数的名称才能获得该函数的地址。完整的步骤应该是: int (*funcptr)(int) = &func; int result = (*funcptr)(10); 而通过Block,就能够使用匿名函数,即不带函数名称的函数。 1.2 带有自动变量 关于“带有自动变量(局部变量)”的含义,这是因为Block拥有捕获外部变量的功能。在Block中访问一个外部的局部变量,Block会持用它的临时状态,自动捕获变量值,外部局部变量的变化不会影响它的的状态。 捕获外部变量,看一个经典block面试题: int val = 10; void (^blk)(void) = ^{ printf("val=%d ",val); }; val = 2; blk(); 上面这段代码,输出值是:val = 10,而不是2。

ios 实现添加footer, footer实现九宫格效果

最后都变了- 提交于 2020-08-07 01:13:02
1.ios 设置 UITableViewCell 组和组之间距离 UiTableView设置组和组之间的间距: 苹果没有提供api 设置组和组之间的间距, 可以设置组 heightForHeaderInSection heightForFooterInSection 来设置 组头部、底部高度 来设置 组合组之间的间距 2. UiTableView Footer 设置 // 1. 获取底部控件最大高度 self.xmg_height= self.subviews.lastObject.xmg_bottom; // 2. 还可以用 self.xmg_height= rowCount * buttonH 高度不起作用: tableView.contentSize = CGSizeMake(0, self.xmg_bottom); 2. 设置图片在上、文字在下 自定义 UIButton 3. 设置间隔 宽、高-1, 把背景显示出来 4. 自定义 CustomCellTableViewCell 重写摆放 ImageView,textLable位置 5. 网页进度条问题: 苹果没有提供加载网页进度代理回调, 那么可以在在uiWebView上面做一个View, 在网页开始加载的时候启动一个定时器,不断设置UIView的宽度,加载一丢丢, 当webViewDidFinished的时候,直接设置

swift中实现多级列表数结构显示

▼魔方 西西 提交于 2020-08-06 03:13:36
在程序开发过程中,常会遇到多级数据结构的显示,大多数情况下都是二级或三级的情况,这时候用UITableview的基本用法就可以解决此类问题。但是,有时候后若是有四级五级...,普通的使用方法就不是好了,之前我就遇到过了很多级的数据结构显示问题,在这里记录一下 因为我的数据量不是很大,才这样弄的,至于数据过大过多是,大家还是自己看着用吧😂 我这里还是用的UITableview,显示的问题是通过对数据本身的操作来完成,简而言之就是在数据中添加一个标记(type:用于显示其结构等级),然后在cell中根据该标记(type),做出相应的显示以区别。 由于显示的数据类型有很多,为避免在多个model中重复书写相同逻辑代码,也为了使用其通用性更好,我使用了协议的方式,下边是我的主要代码 import Foundation ///用于构造多级树 @objc protocol HZJTreeViewModelProtocol { /// 所属父数据(不用手动去设置,会根据setChildModels自动修改) var fatherModel:HZJTreeViewModelProtocol? { get set } /// 包含的子数据(需使用setChildModels方法赋值) var childModels:[HZJTreeViewModelProtocol] { get set } } /

在视图控制器之间传递数据

余生颓废 提交于 2020-08-05 04:24:10
问题: I'm new to iOS and Objective-C and the whole MVC paradigm and I'm stuck with the following: 我是iOS和Objective-C以及整个MVC范例的新手,但我坚持以下几点: I have a view that acts as a data entry form and I want to give the user the option to select multiple products. 我有一个充当数据输入表单的视图,我想给用户选择多个产品的选项。 The products are listed on another view with a UITableViewController and I have enabled multiple selections. 这些产品在另一个带有 UITableViewController 视图中列出,并且我启用了多个选择。 My question is, how do I transfer the data from one view to another? 我的问题是,如何将数据从一个视图传输到另一个视图? I will be holding the selections on the UITableView in an array,

消除UITableView下面的额外分隔符

人盡茶涼 提交于 2020-07-26 19:10:28
问题: When I set up a table view with 4 rows, there are still extra separators lines (or extra blank cells) below the filled rows. 当我设置一个包含4行的表视图时,在填充的行下面还有额外的分隔符行(或额外的空白单元格)。 How would I remove these cells? 我该如何移除这些细胞? 解决方案: 参考一: https://stackoom.com/question/5kM3/消除UITableView下面的额外分隔符 参考二: https://oldbug.net/q/5kM3/Eliminate-extra-separators-below-UITableView 来源: oschina 链接: https://my.oschina.net/u/4438370/blog/4339933

200道iOS面试题面试题整理,底层、技术亮点公司需要的这里都有

瘦欲@ 提交于 2020-05-08 17:21:47
100家知名企业今年来iOS面试题合集: 你要的这里都有; 企业要的这里也有; 从基础开始到进阶、深入底层 整理出188个面试题,全是干货 目录展示: 1、swift和oc的区别 2、编译链接 3、synthesize & denamic 4、在项目开发中常用的开发工具有哪些? 5、UITableView & UICollection 6、NSProxy & NSObject 7、Object & Swift 8、传值通知 & 推送通知(本地&远程) 9、第三方库 & 第三方平台 10、NSCache & NSDcitionary 11、 UIView的setNeedsDisplay和setNeedsLayout方法 12、UILayer & UIView 13、layoutSubViews & drawRects 14、UDID & UUID 15、CPU & GPU 16、点(pt)& 像素(px) 17、属性与成员变量 18、int和NSInteger的区别 (1)import和include (2)@class (3)全局 & 静态变量 19、类和对象 (1)分类拓展协议中哪些可以声明属性? (2)继承和类别的区别 (3)分类的作用 (4)分类的局限性 20、category & extension 21、Foundation (1)字符串 (2)字符串截取 (3)格式