参考计数

引用计数是一种机制,它通过原子地递增和递减引用计数来跟踪对诸如对象,内存块和其他资源之类的资源的引用数。 每当引用一个对象时,该对象都会保留,而引用减少时,则该对象将被释放 。 一旦引用计数或保留计数变为0,内存将被取消分配并回收。 一切似乎都是直截了当的,但是我仍然有以下关于引用计数的问题。 什么是原子? 好吧,原子是元素可以划分的最小单位。 因此, 原子操作是可以操作的最小操作[1]。 原子操作的优点是它们不会阻塞竞争线程[2] 那么这对于声明为atomic的属性意味着什么呢? 好吧,这意味着您尝试对该属性进行的任何操作都必须等待上一个操作完成! 这也是原子慢的原因。 这是否意味着atomic是线程安全的 ? 让我们看一下线程安全意味着什么: “如果一段代码在多个线程同时执行期间正常运行,那么它就是线程安全的。” [3] 但是,通过将属性视为atomic ,只能确保在尝试获取属性时为您提供一个值。 这是一个代码示例,显示即使原子属性也不是线程安全的: 并发队列中的原子属性 关于原子如何工作的研究~~~ medium.com 至于如何使线程安全程序~~~将不得不等待。 旁注 。 这是我听到的一个面试问题: 您如何利用生活经历来解释保持周期? →首先,保留周期是两个对象同时保持一个而另一个导致引用计数从不减为0,因此两个对象都被保留。 一个著名的例子是Titanic XDDD的Jack和Rose class Rose { var jack: LoveOfHerLife } class Jack { var rose: LoveOfHisLife } 创建Rose和Jack时,他们注定是彼此对生活的热爱,所以我只是将他们对生活的热爱分配给彼此。 让rose = Rose() 让jack = Jack() rose.jack =杰克…杰克保留+1 […]

毒蛇的第一个项目

在完成我在Viper的第一个项目之后,这篇博客文章只是一些个人经验。 如果您以前从未听说过Viper和干净的体系结构,则应该明确地观看此视频: 最初,一切都进行得很顺利,当我独自从事该项目时,我对自己感到非常高兴。 但是随后另一位开发人员加入了🙂他的第一个反应并不令人鼓舞: 男人,这个毒蛇的东西有点冗长。 我在各处写协议和存根…… 因此,我再次查看了代码。 好吧,他是对的。 如果您遵循这本书,最终会得到很多协议,在大多数情况下只能使用一次。 那时的某个地方,我还观看了有关保持代码可持续性的视频: 类由不同颜色的圆圈表示,您在类中的依存性越高,圆圈越大。 中心的蓝色大圆圈是AppDelegate。 好吧,它保留了对某些顶级视图控制器的引用,处理了一些通知,初始化了一些数据访问对象。 似乎其中没有太多代码,但最终仍然有很多讨厌的依赖项。 如果您考虑一下,这是有道理的。 AppDelegate可以引用RootViewController,而RootViewController可以引用MenuViewController,依此类推。因此,依赖关系的增长。 第二张图是我的第一个Viper项目。 AppDelegate做得少得多。 基本上,它只是创建一个根线框并将控制权传递给它。 每个模块仅知道需要直接调用的模块。 当然,这是您在任何项目中都想拥有的东西,但是在Wireframes中进行所有设置会使依赖项更加公开,并有助于使模块具有针对性和隔离性。 我最喜欢的是: 错误少很多。 它们几乎没有,而潜入其中的那些易于修复。 代码变得更像可互换的乐高积木。 使用现有模块组装新模块,重新组装旧模块,引入接口并为某些类添加不同的实现,所有这些都很容易做到。 我认为,这种方式的主要原因是依赖注入以及线框中所有模块的创建/组装。 再一次,重构非常容易。 想象一下,更改应用程序的整个导航树不会再让您感到恐惧🙂 几个月后,我很想再次查看该项目。 但是到目前为止,它看起来非常有前途!

使用增强现实(AR)改善智能家居自动化

增强现实炒作是真实的! 您听说过增强现实吗? 去年,它一直是最被大肆宣传的新技术趋势之一,并且活动很多。 AR是虚拟现实(VR)的一种变体,具有比仅玩酷计算机游戏更多的实际应用。 它可能确实很复杂,但简而言之,AR将您看到的真实世界与计算机生成的图像混合在一起。 我们大多数人都看过像《壮志凌云》这样的电影,其中战斗机飞行员在向外看的同时就可以在挡风玻璃上看到飞机上的所有乐器。 这是一个简单但功能强大的示例-座舱外部的真实视图与重要表盘和信息的计算机投影图像融合(“增强”)。 主要是新颖性? 去年,Apple和Samsung都升级了智能手机中的软件和/或硬件,以允许创建AR应用程序。 不幸的是,第一波出现的大多数应用程序都很有趣,但并没有真正有用。 我尝试了大约六种不同的应用程序,并且与它们玩了几分钟之后,我再也没有使用它们。 但是瞧瞧,我遇到了一个名为Magic Plan的应用程序,而我的生活从未如此。 好吧,有点夸张,但是让我解释一下为什么我对这个应用程序感到非常兴奋…… 对于麻烦的WiFi问题(死角,流媒体质量差,吞吐量缓慢),我总是对客户进行现场调查,以了解实际情况。 这不是火箭科学,只需走动整个家庭,便可以平衡手提笔记本电脑,并使用特殊的软件包进行各种Geek无线电信号测量。 说实话,比什么都重要。 获得良好结果的最重要秘诀是拥有准确的平面图并进行适当的测量。 如果您不知道房间的大小,您将无法确定WiFi可以到达多远。 大多数客户都像我一样-他们没有可用的原始架构蓝图,也不会在乎。 当然,您可以获得卷尺或鉴定人的测量轮,甚至可以使用激光指示器(是的,我在亚马逊上看到了所有东西),但是仍然无法在所有家具和障碍物就位的情况下准确测量! 经济实惠的多功能工具 令人惊讶的是,仅需一台iPad和一个便宜的应用程序(Magic-Plan),即可进行自动测量的准确平面图仅需走一个路即可! (您甚至可以只使用智能手机,但我发现iPad容易得多。) AR平面图不仅适用于WiFi规划,而且是用于室内设计,景观设计,翻新工程等的真正有用的工具。 如果您认为“增强现实”仅用于狩猎口袋妖怪生物,就值得一看! 您是否尝试过任何增强现实应用程序? 让我知道你的想法。 智能家居技术专家Robert E. Spivack。 我可以在www.DoItForMe.com上设计,安装和改造家庭自动化解决方案。

自定义UIViewController模态过渡动画

许多自定义过渡教程深入介绍了演示控制器, 模态和导航 控制器案例,并需要下载示例项目(ANGTFT)。 这是自定义过渡的简单,简明的介绍,可以用最少的散文直接跳转到代码。 免责声明:为简洁起见,主视图控制器遵循所有必要的转换协议。 同样,虽然在实践中可能不适合使用强制转换和扩展,但它们还是宽松的。 我们将创建一个简单的滑动抽屉动画,该动画在两个视图控制器之间转换(请参见上图)。 MyViewController是应用程序的根视图控制器,由一个按钮以模态方式呈现抽屉的视图控制器: 第二个视图控制器是DrawerViewController ,其中包含一个用于关闭视图控制器的按钮。 必须使用MyViewController的 onButtonTap方法中的这两行来替换标准的模式转换,该模式转换通常会将显示的视图控制器从底部向上滑动。 抽屉视图控制器.modalPresentationStyle = .custom抽屉视图控制器.transitioningDelegate =自我 注意:未能设置modalPresentationStyle将导致使用标准模式过渡,而不管是否设置了transitioningDelegate 。 为了将MyViewController分配为DrawerViewController的自定义过渡动画的提供者,它必须符合UIViewControllerTransitioningDelegate协议。 在展示或关闭DrawerViewController时,UIKit将调用这些方法。 如果需要使用不同的自定义动画进行演示和关闭,则可以返回不同的动画控制器 。 例如, MyFadeInTransitionAnimator,MyFadeOutTransitionAnimator。 为了简化此示例, MyViewController遵循UIViewControllerAnimatedTransitioning 。 启动过渡并提供动画控制器后,UIKit将调用以下UIViewControllerAnimatedTransitioning方法: transitionDuration(transitionContext 🙂返回过渡动画的持续时间。 设置聚合动画的持续时间时,应该由animateTransition方法使用。 animateTransition(transitionContext 🙂 实现自定义过渡动画。 transitionContext包含对参与视图控制器的引用。 它还包括一个containerView ,必须将所有要显示的视图添加到其中。 符合UIViewControllerContextTransitioning。 调用transitionContext.completeTransition(_ 🙂非常重要 当过渡动画完成时,因为UIKit不允许您的应用在过渡进行中接收触摸事件 。 而已! 自定义过渡动画-Apple Developer Docs 自定义UIViewController过渡— Ray Wenderlich iOS自定义过渡教程-The Swift Dev

应用制作

在过去的几周中,我一直在在家中开发和编程应用程序。 由于纪律严明,只是专心致志,我删除了不起眼的facebook帐户,只专注于跟随Apple的IOS开发人员网站开发名为FoodTracker的应用程序。 经过大约14天的醒来,并注视着屏幕以遵循复杂的代码,并向好朋友寻求帮助,该应用程序以及上传的图片和所有内容均已完成。 创造出可以被普通人使用的东西-尽管不是那么有形,这是非常令人满足的。 该应用程序可让您滚动浏览图片以找到您喜欢的食物,然后将照片及其评分添加到您煮过的食物的列表中。 Alhamdulilah我很高兴取得进展,有关编码的后续步骤正在与一家公司合作为其网站开发IOS应用程序! 展望未来,alhamdulilah! 与通常令人沮丧的职位相比,这是一个更加快乐的职位。 但是总体而言,接下来的几个月应该令人兴奋。 -莱拉

实时跟踪“小时需求”如何? : 解决了

在“全知 ”时代,不知道可能是人类最讨厌的唯一因素。 一个例子就是MH370 ,这是失踪的马来西亚航空公司航班,计划于2014年3月8日从吉隆坡飞往北京。问题“它在哪里?”。 好吧, Teliver为您提供了该确切问题的解决方案。 实时位置共享对所有陷入困境并需要帮助的人们都是一个福音。 对此的需求至高无上,并且人们逐渐决定,更大,更精确的解决方案将更有帮助。 众所周知,实时跟踪已包含在出租车预订应用程序中(例如Uber),各种业务的负责人纷纷转向。 此外,此应用程序的实时路径和位置共享是向知情的客户基础设施迈出的更大的一步。 Teliver使在需要它的所有企业中轻松实施该技术变得容易。 公众面临的琐碎问题及其解决方案: 1) 饥饿的人 -送货上门的美食很快就成为任何一家餐厅发挥作用的必要条件。 苛刻的应用程序直接说明其流程; 一旦食物离开酒店,直到到达目的地,顾客就一团糟。 在实际交付食物之前,客户打了十二个电话。 解决方案 -在客户的应用程序上实时跟踪交付者。 2) 寻求公交车的人 —我们不知道公交车或公交车什么时候到达的等待时间? 在某些情况下,人们会在不知道他们等待的交通工具是否已经离开的情况下等待。 这种特殊情况更加令人难过。 解决方案 —实时跟踪运输情况。 3) 等待包裹的人 —等待订购的新东西令人不快。 交货日到来时,这更是痛苦。 我们会保持警惕,直到包裹紧紧握在手中。 每个在线购物者都经历了这个阶段,并希望知道包裹的确切位置。 解决方案 —电子商务应用程序上的集成地图,显示包装的实时状态 这样的情况非常丰富,但尚未提供解决方案。 Teliver提供了这一点—尽管不满足饥饿者的需求,但他的问题却得到了答案。 Teliver会做什么? 拥有已构建应用程序的企业可以利用Teliver为客户提供定义明确的信息服务。 众所周知,“ 更好的服务,更多的客户 ”,并且不可否认的是, Teliver可以作为一种工具,为您的应用程序带来更好的流量。 提供这些服务所用的技术不是新技术,但由于提供清晰的集成功能方面的复杂性而无法适应。 使用全球定位系统(GPS) ,需求映射中提供的准确性令人震惊。 T eliver为Android和iOS提供了一个非常易于适应的工具包,使集成尽可能地顺畅。 除此之外,定制选项是值得关注的选项。 与提供半满的服务的服务不同, Teliver通过为客户提供微详细的自定义选项来进一步发展。 专注于功能方面或视觉效果, Teliver迈出了一步,并提供了微观定制。 Teliver将适合哪些业务领域? 在过去的几十年中,互联网可靠商品和服务的增长获得了广泛的动力,特别是在过去的十年中,图表一直在飞速增长。 […]

[memo] [XIB]用于可重用组件的Xcode 5中的Xib文件中的自定义UIView-第1部分

演示: 成功显示了两个xib组件。 但我不知道为什么会有一个灰色方块。 源代码 https://github.com/jameskrauser/XIB_Component1 第2部分 https://www.youtube.com/watch?v=5ibVlOx2o7I&t=378s 源代码 https://github.com/jameskrauser/XIB_Component2 jameskrauser / XIB_Component3 XIB_Component3 XIB_Component3github.com

曼谷捷运蓝紫线终于连接

去年紫色曼谷捷运站开业时,它与曼谷地铁网络的其余部分分开。 乘客不得不走到捷运蓝线的最后一个车站,华南蓬,然后乘免费巴士去紫线的第一个车站桃园。 今天,随着捷运蓝线的首次扩展,这种情况发生了变化: 这种微小的变化带来了巨大的变化,每天使用这两种线路的数千名乘客的出行时间缩短了10分钟以上。 即使添加了最新的内容,这两行的工作仍远未完成: 捷运蓝线将在未来3-4年内每年开放多个扩展 一条新的MRT Purple Line扩建部分刚刚获得批准,这可能会在MRT Blue Line工程完成后开始 我已经更新了Online Bangkok Metro Map和Bangkok Metro App , 在App Store上可用。 所有Metro应用程序都将发生重大变化! 请继续关注进一步的公告!

iOS上的UITest轻松完成

我们知道,设计和编写测试并不是世界上最令人兴奋的事情,但是对于您编写的任何应用程序,测试都是绝对必要的。 它们可能是AppStore上闪闪发光的5星级应用程序,或者是漏洞百出的代码集之间的区别。 我们都知道什么是单元测试以及如何编写它们,但是自XCode 7以来,Apple便向我们介绍了其IDE中的UI测试。 通过这些测试,您可以记录用户与应用程序的交互,并检查其是否表现正常。 在本文中,我们将重点关注测试的UI方面,以及如何在iOS应用中记录和编写您的第一个测试。 但是为什么要专注于UI? 您的应用程序可能在后台执行了它需要做的所有事情,并且单元测试可能具有100%的覆盖率,但是对于普通用户来说,如果有什么地方不合适,那么就会出现问题。 通过测试应用程序的用户界面,您可以查看用户与用户界面的交互方式,并检查他们是否看到了应有的样子。 现在,让我们深入研究如何轻松测试UI而不会有任何麻烦。 在开发iOS应用程序时,我们必须首先决定将使用哪种架构。 苹果建议 ,大多数开发人员都使用MVC,但是MVC有其缺点。 我们可能都在某个地方读过或听到过大量的视图控制器笑话 。 可悲的是,在大多数情况下是这样。 当我们不得不将与View或Model逻辑不相关的所有内容放到Controller逻辑中时,控制器中会生成很多代码,而在Model或View中则不会那么多。 让我们快速看一下Viper是什么及其组件。 如果您不熟悉Viper,让我们快速介绍一下。 Viper是View,Interactor,Pentent,Entity和R external的首字母缩写。 这基本上是一种实施“ 单一责任原则”的方法 ,旨在创建一个更清洁,更模块化的结构。 Viper通过具有以下结构来实现此目的: 在上面的插图中,我们可以看到Viper方法以及架构的每一部分如何相互集成。 毒蛇的每个元素都负责完成一项工作,并要求/将任何其他工作发送/发送到负责任的元素。 例如,演示者告诉视图它需要显示什么。 在这种情况下,View的唯一工作就是显示演示者告诉其显示的内容。 为了帮助测试,Viper的每个元素(实体除外)都实现了一个协议,因此您可以轻松模拟类的任何部分并编写零麻烦的测试。 很简单吧? 让我们深入了解Viper的每个主要组件。 视图是被动的,因为它基本上只是等待演示者提供其内容来显示。 它还需要接收来自用户的输入,如果需要处理任何内容,则将其传递给Presenter。 View还具有有关如何显示数据的所有逻辑,例如哪些信息进入UILabel,以及哪些UIImageView将用于显示Presenter发送的图像。 输入想要用于测试目标的名称并创建它。 XCode会将这个新目标添加到您的项目中,并自动创建一个与目标名称相同的新文件。 在此文件中,您将已经创建了一些功能。 在每个测试之前和之后都有setUp()和tearDown()运行,还有一个testExample()。 您可以根据需要删除它们,但是为了简单起见,您可以选择函数testExample()并开始测试。 然后,XCode将允许您通过页面底部的红色圆圈按钮记录测试。 单击它,XCode将构建您的应用程序并启动模拟器。 您在此模拟器上执行的每项操作都将记录并记录在所选功能上。 我为本文创建的页面包含两个元素:UIImage和UIButton。 当我运行记录器并单击两者时,它生成了以下代码: 哇,这是很多用于点击图像的代码,不是吗? UIButton更好,因为它具有文本并且XCode知道如何搜索它,这意味着您可以找到所需的内容。 那么,如何处理图像呢? 嗯,有一个accessibilityLabel可以帮助您在屏幕上找到任何元素。 我将图像的acessibilityLabel设置为profileImage ,这使您的测试代码更易于编写。 开发iOS应用程序时,可访问性标签是您最好的朋友。 它为听力障碍的用户提供了一种导航您的应用程序的方式,还可以帮助您更好地测试UI。 您必须问自己,为什么我首先向您介绍了Viper。 当然,我们所做的测试可以使用MVC进行,但是如果您必须测试应用程序中更深层次的内容怎么办? […]

我们是否有机会为iOS 11.3安装Cydia?

Apple昨天向开发人员播种了iOS 11.3第四测试版,其中包括一些重要的错误修复程序。 如果您是注册开发人员,则可以通过无线软件更新机制下载iOS 11.3 。 目前,我们已经达到11.3版本的发布边缘,这意味着Apple即将发布最新的11.3更新的公共版本。 因此,在即将发布的第三个主要更新发布之前,您应该了解有关为iOS 11.3安装Cydia的所有信息。 首先,我们将为您提供一个快速指南,以在您的iPhone,iPad或iPod touch设备上下载iOS 11.3。 要完成此过程,您应该已经是Apple Developer Program或Apple Beta Software Program的注册开发人员。 满足以上条件后,转到“设置”>“常规”>“软件更新”,然后将当前软件版本升级到11.3 beta,或者也可以通过连接到PC或Mac使用iTunes更新固件。 自最初的Beta版本11.3更新以来已经过去了两个多月。 如前所述,我们几乎可以安装稳定版本了。 无论如何,我们是否有机会安装适用于iOS 11.3的Cydia ? 如果您询问当前时间,答案是“否”。 原因仍然是我们处于状态下,因此,即使越狱开发人员也未公开它,即使他们已经为iOS 11.3越狱开发了新工具。 但是,由于我们已经接近iOS 11.3的正式发布,因此无需担心。 因为一旦Apple发布了公开更新,全球所有越狱开发人员都将开始发现漏洞和利用漏洞来开发新的越狱工具包。 您知道互联网上有Cydia替代品吗? CydiaGuru是Cydia下载的最著名的替代应用程序。 但是CydiaGuru与Cydia官方安装程序有所不同。 最主要的是您不需要担心iOS版本或设备型号,此应用程序将在不考虑上述事实的情况下安装Cydia。 另外,很高兴通知您CydiaGuru的最新更新会在几秒钟内安装适用于iOS 11.3的Cydia。 请访问www.cydiaguru.com,以了解有关iOS 11.3越狱和Cydia下载的更多信息。