【转】几点 iOS 开发技巧
[译] 几点 iOS 开发技巧
原文:iOS Programming Architecture and Design Guidelines
原文来自破船的分享
原文作者是开发界中知晓度相当高的 Mugunth Kumar,他是 MKNetworkKit 的作者(虽然没有 AFNetworking 使用那么广泛,但也是一个很棒的 Network Kit),更是最近流传甚广的《iOS 5/6 Programming – Pushing The Limits》的作者。
文章中 MK 介绍了几点开发中常用的小技巧,几条 Tips 简单易懂,但是很实用,不但可以提高开发效率,而且可以提高代码的可读性和可复用性。
Types in Objective-C 和 Naming Conventions 两个章节介绍性内容较多,下面从 Subclassing 开始简单直译一下,第一次翻译,有诸多不到位的地方,各位多包涵。
Subclassing 继承/子类
大多语言允许开发者子类化框架所提供的类,但是在 Objective-C 中不完全是这样。大部分常用的类,诸如 NSArray、NSSet、NSDictionary 基本上都是集合类型的。不建议继承这些类,除非你准备转发调用或者实现所有必要的原始方法。
在传统的开发语言中,通常会通过继承基础类型(类似 NSArray 的类)来新增方法,重载已有的方法,或是自定义 UI 组件的外观。在 Objective-C 中,一般通过 Category 来扩展新方法。通过混合方法(swizzling the method?)来重载 SDK 提供的实现。以及外观相关的代理协议(Protocol)来定制 UI 组件的外观。
虽说如此,还是有一些类是经常会继承它们的,比如 UIViewController、UITableViewController、UIControl 等。继承 UIViewController 大概是开发过程中最棒的一件事,因为它使得添加常见的功能变得异常简单。在我开发的每个 App 中,会有一个继承自 UIViewController 的子类,它实现了一组常用的方法。所有其他的 View Controllers 则都继承自这个基础类。
(译者注:Web 开发中也常会有一个用于被继承的 BaseController 来提供公共方法,看来开发是触类旁通的,要多思考)
所以,以下继承方法:
1 |
|
应该替换成:
1 2 |
|
这个公用基础类可以在后续开发过程中用来添加公用的方法。在这个基础父类中,我通常会申明以下方法:
1 2 3 4 5 6 |
|
实现如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
|
现在,App 中的每个 View Controller 中,可以很方便的通过调用以上方法来改变当前 View 的状态为 Loading 或者 Error。而且,View Controller 可以通过重载 -errorView
和 -loadingView
方法来提供自定义错误界面和 Loading 界面。
你还可以通过重载这个基础类中的 -viewDidLoad
来统一修改所有 View 的表现。比如为所有的 View 添加相同的背景图片或背景色:
1 2 3 4 5 |
|
UI Customization 自定义 UI
自定义 UI 可以大致分成两类,一是自定义控件,二是皮肤/主题。前者可以让 App 更出色,而后者是大部分 App 都需要的。我建议给 UIFont 和 UIColor 写 Category 扩展来提供自定义字体和自定义颜色。
例如,给 UIFont 添加如下方法:
1 2 3 4 5 6 7 8 9 |
|
你就可以很方便地使用 [UIFont appFontOfSize:13]
得到 MyriadPro-Regular
字体。这样当你的设计需求变更时,就可以很快速的更换整个 App 中的字体。
相同的设计模式也可以应用到自定义颜色中。给 UIColor 添加以下方法:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
|
所以,千万不要用 Interface Builder 来选颜色。
Subclassing UILabels 继承 UILabel
还有一个小窍门,当开发者继承 UILabel、UITextField 和 UITextView 时,通常在 -initWithFrame:
和 -initWithCoder:
方法中设置字体和颜色,参见以下代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
|
这个技巧使得开发者可以在 Interface Builder 中自定义这些元素的外观。在 IB 中拖入一个 UILabel
,并且修改它的类为你自定义的类,瞬间就完成了这个 Label 字体和颜色的自定义,不用任何多余的代码。
这个技巧多数情况下相当管用,但是当你的 App 支持自定义主题,且用户可以通过设置界面更换主题时,就会显得有些麻烦。
-initWithFrame:
和 initWithCoder:
会在 UI 组件创建的时候被调用,所以在这之后如果要改变字体和颜色,就需要很多额外的代码。因此,如果你的 App 支持主题,写一个主题管理器的全局单例来提供全局的主题、字体、颜色。
如果你用到了我说的第一个方法,你的 UIFont
的 Category 现在可以这样实现了:
1 2 3 4 5 |
|
UIColor 同理。其实没有正确或错误的方法,上述方法都是可行的。
遵从这里提到的设计模式,可以让你的代码干净得像写的很漂亮的 JS/CSS。试着在你的下一个项目中用这些方法吧。
Allen 后记
之前在想 iOS 开发到底是否需要一个类似 Web 开发中的所谓的框架,但渐渐发现其实 iOS SDK 本就是一个高度封装了的框架了,可能我们需要的不是更更高层的框架,而是一种好的设计模式、开发习惯和代码结构。因此是不是可以从一个 Project 的层面出发,写一个干净的框架,并且定义一些规范,就是一个很好的“框架”了?而不是非得提供 Router 之类的往 Web 开发框架去靠。
转载于:https://www.cnblogs.com/ymonke/p/3481469.html
【转】几点 iOS 开发技巧相关推荐
- iOS开发技巧:设置App icon图标及修改应用程序名
前言 这是iOS开发技巧系列博客的第二篇,本篇主要简单介绍一下如何设置应用程序的icon图标以及修改应用程序名. 设置 icon 首先我们来看看如何设置App icon图标,设置应用程序的icon图标 ...
- iOS开发技巧 - Size Class与iOS 8多屏幕适配(一)
0. 背景: 在iOS开发中,Auto Layout(自动布局)能解决大部分的屏幕适配问题. 但是当iPhone 6和iPhone 6 Plus发布以后, Auto Layout已经不能解决复杂的屏幕 ...
- 汉诺塔自动解题动画中的iOS开发技巧
引 前段时间做了一道题,要求实现汉诺塔游戏的自动解题动画: 汉诺塔游戏应该都了解规则: 1.将盘子全部移动到塔C 2.每次只能移动一个圆盘: 3.大盘不能叠在小盘上面. 要求由用户输入盘子的数量,绘制 ...
- iOS开发技巧-国际化(Localization),只看一篇就够了
转:https://www.jianshu.com/p/f8edd7b7a217 本文主要涉及iOS的国际化,网上虽然有很多相关的文章,但是仔细阅读下来感觉都不太全面,因此重开一篇总结,记录项目中遇到 ...
- iOS开发技巧之:如何用Xcode导出ipa包
我们在实际的开发中,会经常需要导出ipa安装包.无论我们用的是个人账号,还是企业级账号,都会有这个需要.接下来,我会用图文并茂的方式,教大家如何导出ipa包. 1.建议设置 run 为 release ...
- iOS开发技巧(系列十八:扩展UIColor,支持十六进制颜色设置)
新建一个Category,命名为UIColor+Hex,表示UIColor支持十六进制Hex颜色设置. UIColor+Hex.h文件, #import <UIKit/UIKit.h> # ...
- iOS开发技巧,细节(二)
1.常量名称最好用static标识,例如下面的代码,包括其他一些只需要定义一次,之后不需要变化的变量也最好使用static static NSString *CellIdentifier = @&qu ...
- iOS开发技巧--iOS app 上架(2016年10月底)以及版本迭代上架
写一下app store的上架流程. 主要分6大部分: 1创建证书的请求文件 2 创建证书 3 创建app id 4 创建app 配置文件 5 填写app相关信息 6 xcode打包上传 1创建证书的 ...
- iOS开发技巧之:UILabel设置行间距和字间距并计算高度
#define UILABEL_LINE_SPACE 6 #define HEIGHT [ [ UIScreen mainScreen ] bounds ].size.height //给UILabe ...
最新文章
- hibernate它 11.many2many双向
- JS中的事件冒泡——总结
- Nginx服务的信号控制之USR2
- JS生成动态表格并为每个单元格添加单击事件的方法
- java开发工具包jdk包括哪些
- HDU 5882 Balanced Game 分析+欧拉图
- 论文浅尝 | 神经网络与非神经网络简单知识问答方法的强基线分析
- js在一个指定元素前添加内容_WebAR开发指南(1)---使用AR.js实现第一个WebAR demo...
- 上周并发题的解题思路以及介绍Go语言调度器
- 企业做微信营销有什么优势
- 你觉得一个人有几个手机号合适?
- hdu5481 Desiderium
- 真正智能的语音识别系统离我们还有多远
- JQuery正则验证
- 第九届河南理工大学算法程序设计大赛 正式赛(部分题解)
- 台式计算机识别不了u盘启动,台式机进入不到U盘启动怎么办
- html svg单击事件,html5 svg 中元素点击事件添加方法
- PHP怎么发送邮件?
- 编写程序,生成一种贯穿10*10字符数组(初始时全为字符'.')的“随机步法”。程序必须随机地从一个元素“走到”另一个元素,每次都向上、向下、向左或向右移动一个元素位置
- oracle中的with函数,关于oracle中With函数的用法