Tag: iOS App开发

了解Apple的二进制属性列表格式

标记字节有时足以完全识别一个对象。 例如,空值的标记等于零,布尔值的标记为0(如果为false),如果标记为0,则为0x09(如果为true)。 所有其他对象都可以通过其4个最高有效位来唯一标识(从现在开始,我将使用最左和最右的术语代替MSB和LSB)。 例如,整数的最左4位是0001(0x1),而对于字符串,它们是0110(0x5)。 剩下的最右边的4位表示大小信息,即,此类型的实际值将在标记之后占用多少字节。 在某些情况下,如果对象足够小,则会立即在最右边的4位中对大小进行编码。 例如,ASCII字符串“ Hello”将被编码为0x55,然后将跟随实际的字符值。 在其他情况下,填充标记(0x0F)与对象标记进行“或”运算,表示下一个字节在实际值字节之前编码大小信息。 更具体地说,如果标记的最右4位等于1111(0xF),则下一个字节将具有以下结构: 其最左边的4位等于0001(0x1) 它的最右边的4位告诉我们编码对象大小需要多少字节。 如果最右边的4位包含值x ,则大小将需要pow(2,x)字节 然后,跟随pow(2,x)个字节,应该以大字节序读取该字节,以提供对象的实际大小。 之后,将遵循对象的实际值。 例如,字符串“ This is a long string”包含21个ASCII字符。 标记为0x5F,后跟字节0x10 (因为pow(2,0)= 1,并且1个字节足以编码值21),然后是0x15 (十六进制的十进制21),然后是21个字符其他。 对应于诸如整数,实数,字符串之类的对象的标记紧随其后的是代表其实际值的多字节序列(例如,如上所述的单个字符串字符)。 但是,并非总是如此。 对于对象容器,例如数组和字典,标记字节后跟对象引用 只是偏移表的偏移量(请参阅下一节)。 这样的偏移量是object_ref_size 由bplist尾部确定的长字节,从偏移量表的开头开始计数。 因此,容器元素只是大小为object_ref_size的引用,它指向偏移表中的某个位置,该位置本身就是offset_table_offset_size 字节长,指向对象表,特别是指向与单个对象相对应的标记。 下一节中的示例将消除所有混淆。 此技术将实际的多层结构平面化,并允许所有对象具有固定的大小。 因此,我们始终知道,值0xA5的标记后面是5 * object_ref_size字节。 这种间接级别也允许基本的压缩形式。 当容器的值完全相同时,它们可能指向相同的偏移表偏移量。 容器示例: 0xA5 — 5个元素的数组。 在标记后没有立即找到这5个元素的值。 相反,在标记之后,我们找到5个对象引用,它们充当偏移表的偏移量。 遵循这些引用后,可以在对象表中找到其各自的字节标记的偏移量,在该表中可以找到实际值(或者如果标记再次是容器,则遵循相同的过程)。 0xAF 0x10 0x0F —由15个元素组成的数组(与上面相同,但是现在大小信息不适合4位)。 随后是15个对象引用。 0xD6 —由6个键值对组成的字典。 […]

适用于开发人员的iOS App开发的新趋势2018

如今,iOS应用程序的需求量更大。 iOS应用开发公司推出了许多新功能。 苹果公司首先在iPhone和iPad中应用了几乎所有新技术。 例如,iBeacon是被视为物联网的设备,可以使更多更好的应用程序和用户使用更加便捷。 苹果一直在为用户提供新的东西,并保持其简单和安全。 在此博客中,我们正在分享针对Developers 2018的iOS App开发中的一些新趋势。 iOS应用程序开发的主要趋势 随需应变iBeacon技术 iBeacon是Apple的专利之一,但这并不意味着Android设备和其他媒体也看不到该信标。 信标和iBeacons并不仅仅适用于Apple设备,您还可以在客户支持中使用它们。 零售商在本地市场使用信标技术可能会获得巨大利益。 该技术最初在2015年初未被接受。但是,很少有Apple iOS App为零售业推出Beacon App,并且与其他技术相比,其成功率呈爆炸式增长。 当地市场的主人说: 到2016年,已有85%的美国零售商使用过Beacon。 云创新相结合 如您所知,根据用户需求,应用程序开发受到限制。 用户想在任何地方访问应用程序。 对于Android和IOS应用程序而言,安全性是其最大的弱点。 用户正在全球范围内使用智能手机。 商界人士可以使用云计算功能来保持与协作者和客户之间远距离位置的关系。 您可以向差旅员工,自由职业者或远程员工提供访问信息,以实现良好的工作与生活和谐。 Swift编程—创建出色的应用 自几年前以来,Objective-C一直是iOS应用程序的主体。 Swift是一种创新技术,它是Apple的一种新的专有编程语言,可以与Objective-C共存,但要好得多。 斯威夫特语言在增长。 如果他们正在开发应用程序,则必须立即学习Swift。 语言不会随着Apple发明该语言而改变。 Swift将为iPhone,Mac和iPad用户带来更好的应用程序。 与Objective-C相比,Swift的编码速度更快,测试更容易。 Swift旨在提供与Cocoa和Objective-C的无缝兼容性。 Swift旨在替代Apple应用程序的Objective-C,并提供比Python更强大的语言。 Swift是2018年iOS应用程序开发中最受欢迎的趋势之一。

使用Xamarin.UITest和Page对象模式进行自动化的UI测试

移动应用程序的UI测试至关重要,以便在最终用户手中准确测量给定应用程序的可用性。 当应用程序的功能集增长时,手动测试应用程序的UI可能会效率低下,如果需要测试多个设备配置,则几乎不可能。 因此,自动化的UI测试已成为开发人员监视其移动应用程序行为的宝贵工具。 使用Xamarin.UITest框架,我们能够快速而轻松地完成此任务。 Xamarin.UITest,Calabash和NUnit概述 Xamarin.UITest是基于Calabash的自动化测试框架,允许开发人员编写以NUnit编写的验收测试。 Calabash是用Ruby编写的核心框架,它使开发人员能够编写自动UI接受测试。 最后,NUnit是用于基于.NET的语言的单元测试框架。 开发人员可以使用NUnit和Xamarin.UITests对iOS和Android应用程序运行测试。 从那里,开发人员还可以通过Visual Studio App Center(以前称为Xamarin测试云)提交这些测试,以使其在数百个物理设备上运行。 为什么要编写自动化的UI测试? 自动化的UI测试允许快速开发健壮的代码库,同时能够系统地测试多个设备目标上的常见用户方案。 如果团队决定重构其核心体系结构,它还允许用户快速测试应用程序。 这使团队可以清晰地了解可能需要检修的工作项目以及按预期工作的项目。 通常,行为驱动开发还具有隐藏的好处,例如难以发现代码库中的错误以及允许专家和开发人员更好地协作来构建用户故事。 使用Xamarin.UITest Xamarin.UITest框架需要依靠一些概念才能正常工作。 框架中的每个自动UI测试都以[Test]属性进行修饰。 在每个测试中,存在测试逻辑的类称为测试夹具 。 给定的测试套件中可以有一个或多个测试夹具。 这些测试应该按照最终用户根据Xamarin自己的“安排-行为-声明”模式与应用程序进行交互的方式进行逻辑安排。 此模式要求设置和初始化测试条件(安排),测试将像用户一样操作并与应用程序交互(执行),最后,测试将检查这些交互的结果(声明)。 下面是一个示例。 我们将对包括本文在内的所有示例使用Xamarin.iOS。 初始化 要在iOS上初始化Xamarin.UITest,请使用静态ConfigureApp类: var config = ConfigureApp .iOS .InstalledApp(“package.identifier”) .EnableLocalScreenshots(); 这允许UITest库将应用程序部署到物理设备上以运行测试。 使用InstalledApp允许在物理设备上以编程方式启动,而调用AppBundle将强制在模拟器上运行。 在物理设备上进行测试时,务必将应用程序的捆绑软件ID放置在package.identifier参数的位置。 您可以使用应用程序的相对或绝对路径在模拟器上进行测试。 在我们的情况下,如果没有用户首先通过身份验证应用程序登录,该应用程序将无法成功运行。 登录后,用户将被重定向到原始应用程序。 这可以通过框架以与上述相同的方式实例化应用程序来完成。 重要的是要注意,为了使它在iOS上成功运行,还必须已经构建了该应用程序。 调试测试 在编写UI测试时,可能有时需要手动浏览UI或快速测试一些应用程序命令。 幸运的是,Xamarin.UI测试框架配备了repl(read-eval-print-loop)来处理此问题。 该工具使开发人员可以与应用程序的UI进行交互,从而使他们可以测试单个命令,遍历界面,并清晰地了解哪些视图处于活动状态以及与每个元素相关联的元数据标签。 为了使用repl,我们只需要从测试内部调用IApp.repl()方法。 当执行repl()方法时,它将暂停当前测试,并在新的终端窗口中打开repl。 在这里,我们可以直接与该应用进行交互,测试命令和查询,并进一步了解我们的UI。 在编写测试时,我们经常需要检查屏幕上实际存在的视图。 为此,repl有一个名为tree的漂亮命令,该命令提供了屏幕上当前可见的所有视图的层次结构列表。 由于Xamarin.UI测试框架的许多方法都依赖AppQuery对象在屏幕上找到正确的视图,因此我们需要知道实际上是在获取正确的元素。 […]

iOS版Sweet&Swifty动画

“在计算机科学中, 数据结构是在计算机中组织数据以便有效利用的一种特殊方式。”-维基百科 这些数据结构和设计模式使您可以通过简单且普遍有用的解决方案来摆脱臭名昭著的反模式 。 输入SwiftyAnimate(插件🔌)。 制作动画的更好方法…… 您是否尝试过将多个动画串在一起? 是的,你当然有。 您将每个后续动画包装在上一个动画的完成处理程序中,并迅速结束编写其他功能的工作,以打破厄运金字塔(或死亡虫洞?)。 无论您最终得到什么,都不是您真正想要的。 也许像这样……? 输入要救援的队列! 它们为您提供O(1)入队和出队的时间复杂度,而您在Swift中使用标准Array类型无法获得(阵列对append和popLast操作具有O(1)的平均时间复杂度,其中popFirst是O(n)操作)。 (现实生活中的例子)

使用Swift创建iPhone应用程序,该应用程序使用Stripe和Heroku向信用卡收费

使用Swift创建iPhone应用程序,该应用程序使用Stripe和Heroku向信用卡收费 初学者入门教程,在Swift iPhone 6 OS 9上使用Xcode和Sublime与Composer,CocoaPods,Stripe和Alamofire创建首次充电,该OS与从您的OS X El Capitan终端运行的PHP Heroku服务器通信。 YouTube教程:http://youtu.be/ndho8R-VAPc 登录到您的资料: 确保您具有Apple ID和密码 注册/登录Stripe.com 注册/登录heroku.com 更新您的资料: 最新的Xcode和Swift:https://developer.apple.com/downloads或http://adcdownload.apple.com/Developer_Tools/Xcode_7.3/Xcode_7.3.dmg 最新Sublime:https://www.sublimetext.com/3(我正在使用v2) 最新的作曲者:https://getcomposer.org/download/ 最新的Git:https://git-scm.com/downloads或https://coolestguidesontheplanet.com/install-update-latest-version-git-mac-osx-10-9-mavericks/ 最新的PHP:http://php-osx.liip.ch/或https://coolestguidesontheplanet.com/upgrade-php-on-osx/(我正在使用v5.5.30) 最新的Heroku工具带:https://toolbelt.heroku.com/ 最新的CocoaPods:https://cocoapods.org/ 准备你的东西: 在浏览器中打开两个新选项卡,然后登录Stripe和Heroku仪表板。 打开一个新的终端窗口(应用程序->实用程序->终端) 在终端窗口中,键入(在美元符号和空格后看到的单词),然后单击Enter: $ CD 这将带我们回家,您的项目文件将在其中保存。 *如果您从未使用过终端,请在Codecademy(https://www.codecademy.com/learn/learn-the-command-line)上尝试本教程。将其弄乱几分钟,以便您轻松使用实际的终端。 现在,为您的新项目创建一个文件夹。 $ mkdir stripe-app $ CD $ ls $打开条纹应用程序 这将创建一个名为stripe-test的新文件夹,将目录更改回主文件夹,列出主文件夹中的文件,然后在Finder窗口(可以关闭)中打开实际文件夹。 打开Xcode以创建一个名为Stripe-test的新Xcode项目作为Single View Application,并将其保存到刚创建的文件夹中(home-> stripe-test)。 不要忘记从应用程序的“常规”选项卡中选择团队。这可能需要您使用Apple ID和密码登录。 退出Xcode。 再次打开终端到服务器文件夹: $ CD $ cd stripe-app […]

为您的企业构建iPhone应用程序需要多少费用?

Android OS在全球市场份额中占据主导地位,但在企业级应用程序方面,iOS仍然是公司的首选。 每年,Apple都会带来一系列新的iPhone,并且企业在iPhone应用程序开发浪潮中不断攀升,以充分利用iPhone的创新功能和出色功能。 在此博客中,我们将提供有关如何确定为您的企业开发iPhone应用程序的成本的信息。 功能,集成点,复杂性,功能,类型和许多页面-这些是估算定制iPhone应用程序开发成本时需要考虑的几个值得注意的因素。 此外,全球各个平台的小时费率也不同。 iPhone应用程序开发的每小时开发费率最高的是美国开发人员,印度尼西亚开发人员则最低。 让我们深入了解如何确定定制iPhone应用程序的开发成本。 每个iPhone应用程序都是不同的,因为它满足不同的业务需求并且具有不同的目标。 但是,传统上,iPhone应用程序开发包括以下阶段: 线框图-当您想到一个应用程序概念时,开发人员便开始制作一个应用程序内容以及用户如何与您的应用程序交互的蓝图,这被称为线框图。 您的应用程序的Designing- Graphics已导入Xcode环境,并且开发人员计划了软件体系结构。 编码-通常,开发人员使用Xcode中的Swift语言对功能进行编码。 同时,开发人员通过包含后端来构建系统架构。 测试-开发人员在设备或Xcode模拟器中测试您的应用程序的质量和性能。 如果存在任何错误,则将启动调试过程。 在Apple上进行部署-提交要比在Google上进行部署更为困难。 经验丰富的开发人员可以将您的应用提交到App Store并发布。 在了解了iPhone应用程序开发人员的作用之后,我们将介绍影响为您的企业定制iPhone应用程序的成本的因素: 开发团队 在这里,我们有两种类型的开发团队:基本或扩展。 一个基本的团队包括一个项目经理,一个UI / UX设计器,两个程序员和一个QA人员。 可以添加后端开发人员来开发后端基础结构。 扩展的团队有一个管理面板设计师和其他开发人员以及基本团队的成员。 应用元素 这些元素包括复杂性,兼容设备的数量以及定制的设计和动画。 技术复杂性包括第三方集成,例如包含支付网关,实时聊天和社交媒体网络。 后端开发,管理面板开发和应用程序内购买也被视为复杂元素。 您企业的iPhone应用程序需要与最新的iOS版本以及一些以前的版本兼容。 例如,如果iOS 11是最新版本,则您的应用应可在iOS 8、9和10上正常运行。 最后,来定制设计。 通常,定制的UI集成起来很复杂,因此,其成本将比实现标准组件要高。 释放后的费用 通常,发布后的支持不包含在初始估算中,大多数iPhone应用开发公司都将其视为一项附加服务。 因此,发布iPhone应用程序后,您需要准备费用。 这些费用包括应用程序营销和促销。 全球iPhone应用程序开发人员的时薪 当选择雇用iPhone应用程序开发人员时 ,您会发现不同国家/地区的小时费率存在很大差异。 例如,美国或加拿大的iPhone应用程序开发公司每小时收取50-250美元的费用,而印度应用程序开发公司每小时收取15-80美元的费用来开发定制的iPhone应用程序。 如果我们考虑这些费用,则可以得到一个简单的应用,而无需与第三方API和后端进行任何集成,价格在2万至3万美元之间。 您需要在具有自定义UI功能和第三方API集成的应用程序上花费$ 35k至$ 50k。 而具有自定义动画,实时同步和复杂后端的高度复杂的应用则需要花费6万至8万美元。 如果有预算限制的公司,则应从印度的iPhone应用程序开发公司聘请开发人员。 印度应用开发人员可以通过灵活的招聘模型为您的公司提供最好的待遇。 但随后,有必要选择合适的iPhone应用程序开发公司,以获取具有所需功能的高质量应用程序。 在Solution […]

WeatherKit

在我的App Store中,有很多天气应用程序可供选择,WeatherKit是完美的选择。 App Store上有很多气象应用程序,我很难安顿下来,只选择其中一个。 它们每个都有不同水平的功能,准确性和外观,以至于在使用WeatherKit之前,我大约有3种天气应用程序可以满足我的需求。 几个月前,我第一次听说WeatherKit(以前称为Aerium),并虔诚地使用了他们的TestFlight beta,但现在该应用程序已经发布,我想我会分享自己的想法。 乍一看 启动应用程序时,您会以清晰易懂的方式呈现给您的天气感到满意,其中的背景渐变非常好,并且四舍五入时,在温度下方标明了风趣。 乍一看,它看起来很简单(这是我喜欢的事情之一); 但是您可能会从其他应用程序(例如Dark Sky)中获取大量额外数据,可以通过在预报卡上滑动来细读它们,以显示空气质量指数,降水几率,风速,湿度和RealFeel温度。 将这些数据置于预测之下意味着,如果您只是打开应用程序以仅查看预测,则不会被大量难以检查的数据所蒙蔽,并且您是否确实希望查看其他数据, 您可以。 可以在最左侧的页面上访问一览表。 如果使用的是免费版本,则一目了然,但如果您使用的是Pro版本,则可以有10个位置。 我没有任何设置,但是,如果您点击位置卡一览表,它将带您返回到该特定位置的预测页面。 雨警 Rain Alert是WeatherKit的杰出功能之一。 尽管许多应用程序都具有类似的功能,但是“雨警报”会提醒您在即将发生的前一天降雨,而例如“暗夜”的15分钟。 我真的很喜欢,在前一天使用它会更有用,因为它可以让您使用Rain Alert中的信息来更改计划,而15分钟之前就太晚了。 WeatherKit专业版 WeatherKit Pro是一个可选的附加功能,与您购买其他应用程序相比,它为您提供了真正值得的可选附加功能。 升级到专业版后,您可以一目了然地解锁10个城市,详细的天气预报,空气质量指数,五天天气预报以及所有其他即将推出的专业功能,此外,WeatherKit团队还致力于为每十个付费用户种植一棵树它得到了。 在为WeatherKit pro付费方面,开发团队为您提供了很多选择-您可以通过订阅付费,而对于那些想要自己付费的人可以这样做。 开发人员在/ r / weatherkit subreddit上也非常活跃,他们可以共享进度并且用户可以建议新功能。 它们对WeatherKit的未来也非常​​开放和透明,对此我们表示赞赏,并且很高兴看到它的发展。 未来 我真的很喜欢使用这个应用程序-从它的美观,显示信息的方式到它提供的数据,但我希望将来有两件事: 预测页面上的渐变屏幕可用于显示特定位置或动画天气的半透明图像,如股票iOS应用程序所做的那样 对Rain Alert的细粒度控制-例如在前一天和前一天的多个提醒 适用于iPad的应用程序,可充分利用12.9 iPad Pro的房地产直至iPad Mini 总体而言,此应用程序没有缺陷-对我来说这是理想之选,并且具有完美的组合和大量信息。 它看起来很漂亮,并且快速流畅。 我期待WeatherKit在未来发生变化。 这是WeatherKit的链接-即使您只是想要一个简单的日常气象应用程序或诸如Dark Sky之类的高级工具,也必须尝试一下。 https://itunes.apple.com/us/app/aerium-weather-forecasts/id1076414499?mt=8

在iOS应用程序中实现用户标记

我确信有很多方法可以在应用程序中实现标记,但是我在这里写此博客是为了以更简单的步骤实现它。 因此,在不浪费更多时间的情况下,让我们更深入地研究这些步骤。 我用图书馆河川 用于在Curofy iOS应用程序中实现用户标记。 Hakawai是UITextView的子类,具有其他功能和对插件的支持。 我使用控制流插件在Curofy App中实现用户标记。 只需输入“ @”,实体列表就会打开供选择。 HAKAWAI入门 如果要在同一视图控制器类中实现textView委托功能,请使用HKWTextView实例创建UIViewController并将其externalDelegate属性分配给此视图控制器。 创建一个帮助程序类,以实现HKWMentionsDelegate中提到的必需功能。 将HKWMentionsPlugin实例的委托属性分配给您的帮助器类的实例。 设置textView实例的controlFlowPlugin以注册该插件。 一些代码片段的实现 让我们从我的应用程序快照开始: 此屏幕代表我的UIViewController,其中包含HKWTextView。 ChooserView是自定义的ChooserView,带有UITableView并带有HKWMentionEntity作为用户对象,其中包含用户的详细信息,例如名称,用户名,专业等。 在此,控制流字符为“ @”。 键入后,选择器视图将打开,以HKWMentionsChooserPositionMode作为HKWMentionsChooserPositionModeCustomNoLockArrowPointingUp进行选择。 从选择器视图中选择实体,并在所选字符串上添加带有属性字符串的提及。 您还可以通过实现修剪HKWMentionEntity名称所需的功能,以所需的方式修剪提到的字符串。 以下是一些代码片段,其中包含使用HAKAWAI的说明: 创建HKWMentionsPlugin的实例,并使用实现HKWMentionsDelegate所需功能的助手类“ CustomHKWChooserViewManager”的实例设置其委托。 这里的HKWMentionsPlugin的ChooserView类是’CustomHKWChooserView’,因为我没有使用插件中提供的默认ChooserView。 CustomHKWChooserView包含UITableView,该UITableView包含包含有关相应实体的详细信息的单元格,这些单元格需要显示在列表中以供选择。 这里的“ UserTagMentionCell”是UITableViewCell ,它显示包含在UITableView中的供选择的HKWMentionEntity ,用作自定义的插件ChooserView。 ‘tagPaginator’是Paginator的实例,可用于分页,以便从服务器中获取匹配当前页面索引的键入字符与控制字符’@’的服务器的用户对象列表(紧随HKWMentionsEntityProtocol )。 每当文本发生变化时,在HKWTextView中输入的字符串中,在创建的提及中添加属性字符串。 您还可以在提及实体的名称上以正则表达式的形式进一步添加超链接,以使其在应用程序中的任何显示位置均可单击。 喜欢,我添加为 -(NSString *)createHyperLinkWithEntityName:(NSString *)entityName和EntityId:(NSString *)entityId { 返回[NSString stringWithFormat:@” <>”,entityName,entityId]; } 您还可以在视图中添加操作按钮,以实现在HKWTextView的文本中插入控制字符的功能,以进一步实现用户标记,如之前针对应用程序所述。 最后,我想说HAKAWAI是一种功能强大的API,可以启用许多其他功能,例如, 使用自定义文本视图容器 使用textView自动更正,或根据用途启用或禁用它们。 支持带有内置属性字符串的自定义属性文本,以供提及插件实体显示。 轻松处理文本视图的纯文本和属性文本的添加,删除或文本转换。 实现一个自定义布局管理器,默认情况下,文本容器修复了多个UITextView错误。 还有更多… […]

雇用美国iPhone App Development Company

是否需要拥护世界上最令人垂涎​​的平台和最富裕的消费者群? 如果是的话,那么不难得出结论,即您需要一款吸引人的iPhone或iPad。 如果您在美国拥有业务,并且想雇用一家拥有出色业绩的iPhone应用程序开发公司 ,那么这里就是您的最佳选择。 1. WillowTree,Inc. WillowTree,Inc.是一家行业领先的移动应用程序开发代理,已为初创企业,企业和面向消费者的公司提供了300多种移动解决方案。 它的客户名单中有GE,强生,时代华纳,AOL,AEG和Regal Cinemas等。 该公司已经为Android和iOS平台构建了一个应用程序。 帮助您雇用该iPhone App Development Company的关键详细信息 平均预算: 50,000美元以上 平均小时费: $ 150 — $ 199 /小时 员工实力: 250–999 地点:弗吉尼亚州夏洛茨维尔 评论: 4.9 / 14 成立于: 2007年 2.唐与汤姆 Dom&Tom是一家端到端技术支持的业务解决方案提供商,它使初创公司,中小型企业,企业和非营利组织能够高效,盈利地工作。 帮助您雇用该iPhone App Development Company的关键详细信息 平均预算: 50,000美元以上 平均小时费: $ 150 — $ 199 /小时 员工实力: 50–249 地点:纽约市 评论: 4.9 / 14 成立于: […]

“经理”对象的麻烦

第一次查看旧项目时,我会扫描警告标志。 我讨论了单例,过多的观察者,今天我将讨论“经理”类。 我必须重申这些是准则,而不是规则,在准则中,这不是关键。 到那里的时候,这里的经理应该对审计进行审核。 但是,如果您有诸如LoginManager,CacheManager和DataManager之类的许多类,则可能会遇到体系结构问题。 症状 管理者可能是职责不明确的症状。 当您考虑时,“经理”一词毫无意义。 在面向对象的编程中,每个类都是一个管理器。 可可触控可能具有UIApplicationManager,UIViewManager甚至是不起眼的NSStringManager。 与现实世界一样,最糟糕的经理人也始于善意。 假设您的AvatarUploadController长超过3,000行,并且其中大多数内容都在处理,例如验证图像尺寸,调整图像大小,上载,检查网络错误等等。 如果您将代码剪切并粘贴到另一个类中,并将其命名为AvatarManager,则它会继续进行。 现在退后一步,问为什么“大规模视图控制器”是个问题。 这是单一责任原则。 每个类都应负责单个功能。 小型视图控制器很好,但是我可以使用大型视图控制器,只要它只能处理视图控制器的内容,例如设置视图层次结构和响应适应性变化。 当您的控制器处理网络时,您就麻烦了。 将大量业务逻辑提取到AvatarManager中可以解决当前的问题。 如果我们要说的是五十行代码,也许就足够了。 但是,如果您要处理成千上万的业务逻辑,则将其包装在Manager中是半措施。 您将扫帚扫入厨房,清理了客厅中的扫帚。 另一方面,管理者可能是人造面向对象设计的征兆。 考虑一下NSFileManager,它实际上只是文件功能的集合。 在真正的OO设计中,可以调用URL实例化NSFile()对象,然后调用其remove()方法,而不是调用removeItemAtURL()。 这并不是说所有代码都必须是面向对象的,而是NSFileManager通过伪造它来破坏功能。 它使用的是singleton defaultManager,因此存在有人(可能是随机的第三方库)分配给其委托属性的风险,并且搞乱了整个应用程序的文件操作。 这真的比一组松散的文件功能要好吗? 如何修复 我已经可以看到初级工程师单击“重构”按钮,准备将Manager与Broker,Coordinator,Utility等进行交换。 这就是规则的问题:詹克找到了方法。 在审核Manager类时,请问:“该类负责什么?”如果您在回答问题时遇到问题,请问:“我可以将其分解吗?”在化身上载示例中,我将提取NetworkAPI ImageValidator ,ImageConverter等。 经理并不是一个大的危险信号,因为即使您知道自己在做什么,它也是一个容易退缩的名词。 如果高级工程师坐在屏幕上想一个名字的时间太长,他们的“你太聪明”的感觉就会浮现。你不想成为那种在不提供任何东西的情况下继续关注美学的业余爱好者。 甚至Apple框架也使用名词,例如Core Location的CLLocationManager。 嘿…让我们来上课吧! 它的职责是什么? 它跟踪用户位置的更改。 它承担太多责任吗? 我不这么认为。 我会担心它是否包含不相关的内容,例如反向地理编码。 好吧,我们可以重命名该类以澄清问题并消除责任感吗? 我将使用CLLocationObserver或CLLocationTracker。 真好! 除了苹果会在游戏后期重命名CLLocationManager之外。 太多的旧代码依赖于此,即使您构建了代码迁移器来提供帮助,也很难证明在向用户交付功能时浪费时间在此上是合理的。 但是,如果您要构建持久的东西或建立任何类型的依赖关系,则值得花额外的几分钟时间在第一时间对事物进行命名。