iOS面试:数组与链表的区别

iOS面试:数组与链表的区别,第1张

数组:内存空间一般是连续的,查找会比较快,通过下标就可以快速的获取元素,但是插入、删除会比较慢,需要移动大量的元素;

链表:内存空间一般是不连续的,查找会比较慢,需要遍历所有元素,但是插入、删除比较快,只需要移动元素的指针即可;

我之前是让开发加上accessibilityLabel,对应的就是Element的name属性,用name进行定位。

还有就是用UIAutomation,录制,手动点下用到的元素,然后加个延时看下能不能点到。

有时候有些元素真的是点不到了,遇到过好像是在collectionView中套了个tableView,没办法,我就按照界面中相对的百分比位置进行定位的。

对于设计师来说,阅读ios规范的时候更多的是关注界面层面的内容,对于系统自带的内容关注较少。交互设计师同时要关注ios的交互手势、导航逻辑、控件使用规范等,但是所谓的“用户行为”的承载页面最终是界面,所以充分的了解界面元素是非常必要的。

本文内容来源ios规范,搬用内容、总结知识。

ios界面元素分为:条栏、内容视图、控件、临时视图

一、条栏

1、状态栏 status bar

状态栏用来显示设备的信息、时间、网络等重要信息。默认是白底黑字与黑底白字。

#状态栏是透明背景

#位置总是处于顶部

注意事项:1、状态栏可以在整个app中采用一个样式,也可以单独为某个视图设计样式。2、状态栏背后不要放其他内容,不要有滚动内容,防止干扰用户阅读状态栏信息。3、尽量不要隐藏状态栏,除非特殊情况,例如全屏看视频可以隐藏状态栏,但是保证轻点屏幕时可以重新恢复状态栏。

2、导航栏 navigation bar

导航栏主要作用是在不同的层级的信息结构之间导航,有时候可以管理屏幕内容。

导航栏上面可以放标题或者控件。

3、工具栏 Toolbar

包含了对页面或者视图中对象进行 *** 作的控件。

4、标签栏 tab bar

标签栏赋予了用户在不同任务、视图和模态的切换的能力。

5、搜索栏 search bar

搜索栏可以接受用户输入的文本,并把它作为一次性搜素输入。

二、内容视图

我们可以把视图是用来承载页面信息的一个容器,iOS 系统为我们提供一些比较优秀的视图模式。在视图部分主要列举几种比较常用的视图模式。

1、精选视图 collection view

可以管理项目的有序集合,比如相册。

2、图像视图 image view

可以理解为装载图像的容器,用来定义图像是否可以拉伸、缩放、位置的调整等。

3、地图视图 map view 

可以呈现地理数据,并支持地图app的大部分功能。

4、滚动视图 scroll view

该视图的作用是可以让用户浏览比视图更大区域的内容。例如放大后,用滑动或者拖拽查看。

5、表格视图 table view

以不同的行来显示信息。该视图提供了控件让用户添加、删除或者多选,查看某行的更多信息。

6、文本视图 text view

可以容纳并显示多行文本。并且支持编辑文本。

7、web 视图

该视图可以显示富Html 内容。比如ios内置的邮件功能。

三、控件

1、活动指示器 activity indicator

表示某个任务或进程正在进行中。任务进行时旋转,任务完成时小时,不允许用户与之交互。

2、日期选择器 date picker

3、标签 label

用于显示静态文本。

4、网络活动指示器 network activity indicator

出现在状态栏,表示网络活动正在进行。

5、页码控件 page control

表示打开了多少视图以及当前视图是哪一个。不允许用户不按照顺序访问视图。

6、选择器 picker

用来显示一组数值,用户可以从中选择一个。

7、进度视图 progress view

用于展示已知持续时间的任务或者进度。

8、刷新控件 refresh control

用于执行用户发起的刷新,通常用在表格视图中。

9、分段控件 segmented control

每一个分段控件相当于一个显示不同视图的按钮

10、滑块 slider

允许用户在一定范围里调整数值或进度。

11、步进器 stepper

以常数量来增加或者减少某个数值。支持自定义图像。

12、开关 switch 表现两种互斥的状态,只用于表格视图。

13、系统按钮 system button

支持自定义样式,可以包含或者文字。默认情况下没有边框和背景。

14、文本框 text field

支持用户输入单行文本。可以在文本框左侧或者右侧显示自定义图像,或者添加系统按钮,例如书签按钮。还可以在文本框的右侧显示清楚按钮。

四、临时视图

1、警告框 alert

包含一条必要的标题和可选信息。

包含一个或多个按钮。 双按钮的情况下,按钮排布规则:1、 *** 作不会造成严重后果,而且是用户最有可能的 *** 作,我们把它放在右边,取消按钮放在左边。2、如果按钮具有破环性,则放在左边,取消按钮在右边。

2、 *** 作菜单 action sheet

显示用户所发起 *** 作的相关选项。用红色的字来显示具有破坏的选项按钮。

3、模态视图 modal view

以模态的形式展现的视图,为当前任务或者情景提供功能。通常包含一个完成按钮,一个取消按钮。比如评论功能,点击评论的图标进入模态视图,d出键盘、文本视图、完成和取消按钮。

要想把一个二维数组值全部替换成另一个二维数组的值,前提条件为二者的规模是相同的。即行数和列数分别相同。 假定均为M行N列,类型为int,即 int a[M][N], b[M][N];要将a中所有值替换成b的值,有以下两种方法。 1 逐一元素赋值。

不管是NSArray,还是NSMutableArray ,alloc之后的得到都是__NSPlacrholderArray

当我们nsarray一个空数组,得到的是__NSArray0

nsarray只有一个元素时,得到的是__NSSingleObjectArrayI

nsarraycount > 1 时, 得到 __NSArrayI

nsmutablearray 返回的都是__NSArrayM

placeHolder 和 placeHoldes 的内存地址一样,说明是一个单例,该类内部只有一个isa指针,init后被新的实例换掉了

CFArray 是CoreFoundation中的, 和Foundation中的NSArray相对应,他们是Toll-Free-Briaged 用的环形缓冲区实现的

C数组的原理 连续的内存空间, 在下标0处插入一个元素时, 移动其后面所有的元素, 即memmove原理

同样的移除第一个元素,需要进行相同的动作

环形缓冲区,在删除的时候不会清楚指针, 如果我们在中间进行插入和删除, 只会移动最少的一边元素

__NSArrayI{

NSInterger _userd; 数组的元素个数,调用[array count]时,返回的就是_userd的值。

id_list[0]; 当做id_list来用,即一个存储id对象的buff由于__NSArrayI的不可变,所以_list一旦分配,释放之前都不会再有移动删除 *** 作了。

}

从实现来看,如果_list还没有构成循环,第一次就获得了全部元素,跟__NSArrayI一样。但是如果_list构成了玄幻,就需要两次,第一次获取_offset到_list末端的元素,第二次获取存放在_list起始处的剩余元素。

__NSArrayM的_list是个循环数组,它的其实由_offset标识

forin速度最快的原因是遵从了NSFastEnumertation协议,它是直接从C数组中去对象对于可变数组来说,最多只需要两次就可以获取全部数据。如果数组没有构成循环,第一次就获得了全部元素,跟不可变数组一样,如果数组构成了循环,那么就需要两次,第一次获取对象数组的起始偏移到循环数组末端的元素,第二次获取存放在循环数组起始处的剩余元素。而for循环之所以慢一点,是每次都要调用objectAtIndex:,添加@autoreleasepool,可以提高效率,如果我们每次遍历不需要知道下标,选择forin。

NSEnumerationConcurrent+Block的方式耗时最大,我认为是因为它采用多线程,就这个方法来讲,多线程的优势并不在遍历多快,它的回调在各个子线程。

以上就是关于iOS面试:数组与链表的区别全部的内容,包括:iOS面试:数组与链表的区别、IOS 自动化测试,一般都是用什么定位页面元素 · TesterHome、《ios界面元素》等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/web/10075732.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-05
下一篇2023-05-05

发表评论

登录后才能评论

评论列表(0条)

    保存