Tag: 快速枚举

iOS 2018系列:破解iOS采访或成为iOS专家(9)

快速枚举,免费电话桥接和必须了解iOS基础知识 这次,我将在下一篇文章中介绍一些有关iOS的基本知识,并概括介绍LRU Cache。 快速枚举是枚举集合内容的首选方法,因为它具有以下优点: 枚举比直接使用NSEnumerator更有效。 语法简洁。 如果在枚举时修改集合,则枚举器将引发异常。 您可以同时执行多个枚举。 Core Foundation框架和Foundation框架中有许多数据类型可以互换使用。 此功能称为免费桥接 ,意味着您可以将相同的数据类型用作Core Foundation函数调用的参数,或者用作Objective-C消息的接收者。 例如: NSArray和CFArrayRef可以在Core Foundation和Foundation之间互换使用 核心基础类型 CFArrayRef 基础类 NSArray 解释(__bridge),(__ bridge_retained)和(__bridge_transfer)强制转换的正确用法。 (__bridge T) op将操作数转换为目标类型T。如果T是可保留对象指针类型,则op必须具有不可保留指针类型。 如果T是不可保留的指针类型,则op必须具有可保留的对象指针类型。 否则,演员表的格式不正确。 没有所有权转移,并且ARC不插入保留操作。 (__bridge_retained T) op将必须具有可保留对象指针类型的操作数转换为目标类型,该目标类型必须是不可保留的指针类型。 ARC保留该值,但要对本地值进行通常的优化,并且接收方负责平衡+1。 (__bridge_transfer T) op将必须具有不可保留指针类型的操作数转换为目标类型,该目标类型必须是可保留对象的指针类型。 ARC将在封闭的全表达式结束时释放该值,但要对本地值进行通常的优化。 为什么应用程序在低设备内存上崩溃? iOS设备通过分页使用虚拟内存。 由于它是移动设备,没有可用的可扩展内存或相当大的内存(如硬盘驱动器),因此页面的可用性受到各种因素的限制,例如打开的应用程序数量,不同应用程序的分配等。 ,即使是处于休眠状态的某些板载应用程序(例如野生动物园,i-tunes,消息传递等)也将始终使用某些页面。因此,实质上,随着应用程序数量的增加,您的应用程序可以使用的页面数进一步减少。 因此,当您的应用程序分配的速率超过其他应用程序释放页面的速率时,您的应用程序将崩溃。 操作系统仅从内存中释放只读数据,而不会释放可写数据。当可写数据超过某个阈值时,操作系统会要求应用程序释放内存。 无法释放内存会导致崩溃。 解释UIView和CALayer之间的关系 尽管许多开发人员都认为,但CALayer是iOS中基本的绘图单元。 我们之所以这样认为UIView是因为它是CALayer之上的一薄层,对于大多数UI挑战,使用某种形式的UIView都可以正常工作。 您无需触摸CALayer,就可以创建自定义视图,将其引入其中,处理用户交互甚至为它们设置动画。 每个带有CALayer的UIView都被称为“底层”或“底层”。您在UIView上调用的许多方法都只是委派给该层。 更改视图的框架时,只是在更改图层的框架。 如果您更改Alpha,它将更改图层的Alpha……等等,包括背景色,变换等。 尽管可以维护UIViews的层次结构,每个UIViews代表彼此的父级和子级,但是您可以使用CALayer进行相同的操作。 我应该使用子视图还是子图层? 这不是一个简单的问题,但是有一个经验法则使决定变得容易得多。 视图和图层之间的主要区别在于,视图可以接受用户输入,而图层则不能。 层只是图形表示。 […]