iOS开发注意事项(一)
1、OC的消息机制与C++等的函数(方法)有很大的不同,OC在运行时所执行的代码由运行环境来决定,而C++等则由编译器决定。如果调用的函数是多态的,C++在运行时要按照虚方法表来查出到底执行哪个函数,而OC不论是否多态,总是要在运行时才会查找所要执行的方法。
2、除非确实必要,OC的类的.h文件里面不要引入头文件,一般使用前置声明来代替,并在.m文件中引入头文件,这样做可以尽量降低类之间的耦合。
有时无法使用前置声明,例如要声明某个类遵守一个协议,这时尽量吧协议的声明放在分类中。实在不行的话,就把协议单独放在一个头文件中,然后将其引入。
3、创建字符串、数值、数组、字典对象时,尽量使用字面量的方式,可以通过取下标操作来访问数组元素或者字典中的key对应的value。使用字面量语法创建数组或者字典时,如果值中又nil,则会抛出异常,所以要确保值不为nil。
数组抛出的异常类似:
*** Terminating app due to uncaught exception 'NSInvalidArgumentException' , reason: '*** -[__NSPlaceholderArray initWithObjects:count:]: attempt to insert nil object from objects[0]'
4、不要使用预处理指令定义常量,这样定义出来的常量不含类型信息,编译器只是会在编译前执行查找与替换操作。即使有人重新定义了常量值,编译器也不会产生警告信息,这会导致应用程序中的常量值不一致。
在实现文件中使用static const来定义"只在编译单元内可见的常量",由于此类常量不会在全局符号表中,所以无需为其名称加类名前缀。
在头文件中使用extern来声明全局常量,并在相关实现文件中定义其值。这种常量要出现在全局符号表中,所以其名称应加上区隔,通常用与之相关的类名作前缀。
例如
//SFAnimationView.h
extern const NSTimeInterval SFAnimationViewAnimationDuration;
//SFAnimationView.m
const NSTimeInterval SFAnimationViewAnimationDuration = 0.05;
5、应该用枚举来表示状态机的状态、传递给方法的选项以及状态码等值。
如果把传递给某个方法的选项表示为枚举类型,而多个选项又可以同时使用,那么就可以将各选项值定义为2的幂,以便通过按位或操作将其组合起来。
用NS_EUNM与NS_OPTIONS宏来定义枚举类型,并指明其底层数据类型。这样可以确保枚举是用开发者所选的底层数据类型实现出来,而不会采用编译器所选的类型。凡是需要以按位或操作来组合的枚举都应使用NS_OPTIONS宏来定义,否则可以出现类似下面的错误:
error: cannot initialize a variable of type 'SFAnimationViewType' with an rvalue of type 'int'
在处理枚举类型的switch语句中不要实现default分支。这样,加入新枚举后,编译器就会提示开发者,switch语句并未处理所有枚举。
iOS开发注意事项(一)的更多相关文章
- ios开发注意事项小总结
一.LaunchScreen LaunchScreen产生原因:代替之前的启动图片 好处: 1.可以展示更多的东西 2.可以只需要出一个尺寸的图片. 启动图片的优先级 启动图片 < Launch ...
- IOS 开发中要注意的事项
1.关于拍摄 TGCameraViewController – 基于 AVFoundation 的自定义相机.样式漂亮,轻量并且可以很容易地集成到 iOS 项目中.不会内存吃紧 2.block 中对控 ...
- iOS开发系列--App扩展开发
概述 从iOS 8 开始Apple引入了扩展(Extension)用于增强系统应用服务和应用之间的交互.它的出现让自定义键盘.系统分享集成等这些依靠系统服务的开发变成了可能.WWDC 2016上众多更 ...
- iOS开发系列--通知与消息机制
概述 在多数移动应用中任何时候都只能有一个应用程序处于活跃状态,如果其他应用此刻发生了一些用户感兴趣的那么通过通知机制就可以告诉用户此时发生的事情.iOS中通知机制又叫消息机制,其包括两类:一类是本地 ...
- IOS开发基础知识碎片-导航
1:IOS开发基础知识--碎片1 a:NSString与NSInteger的互换 b:Objective-c中集合里面不能存放基础类型,比如int string float等,只能把它们转化成对象才可 ...
- iOS开发 Xcode8中遇到的问题及改动
iOS开发 Xcode8中遇到的问题及改动 新版本发布总会有很多坑,也会有很多改动. 一个一个填吧... 一.遇到的问题 1.权限以及相关设置 iOS10系统下调用系统相册.相机功能,或者苹果健康 ...
- iOS开发系列--C语言之基础知识
概览 当前移动开发的趋势已经势不可挡,这个系列希望浅谈一下个人对IOS开发的一些见解,这个IOS系列计划从几个角度去说IOS开发: C语言 OC基础 IOS开发(iphone/ipad) Swift ...
- iOS开发-UI 从入门到精通(三)
iOS开发-UI 从入门到精通(三)是对 iOS开发-UI 从入门到精通(一)知识点的综合练习,搭建一个简单地登陆界面,增强实战经验,为以后做开发打下坚实的基础! ※在这里我们还要强调一下,开发环境和 ...
- iOS开发-UI 从入门到精通(二)
iOS开发-UI 从入门到精通(二)是对 iOS开发-UI 从入门到精通(一)知识点的巩固,主要以习题练习为主,增强实战经验,为以后做开发打下坚实的基础! ※开发环境和注意事项: 1.前期iOS-UI ...
随机推荐
- java 读写锁详解
详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt124 在java多线程中,为了提高效率有些共享资源允许同时进行多个读的操作, ...
- Spring 设置readonly 事务只读模式
详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt394 在学习spring事务的时候,发现设置readOnly后不启作用. 查 ...
- hdu 3549最大流Ford-Fulkerson算法
Ford-Fulkerson算法 戳戳http://www.cnblogs.com/luweiseu/archive/2012/07/14/2591573.html Ford-Fulkerson方法依 ...
- 分而治之(Work Breakdown Structure, WBS)
不知道大家有没有和我一样的情况,就是想写一篇博客,不知道从何写起,如何组织语言,如何安排这篇博客的要交待的事情的前因后果:如果在写作过程中被打断,又不知道如何重新拾起键盘,从哪里写起."就如 ...
- 团队作业4--第一次项目冲刺(Alpha版本) 5
一.Daily Scrum Meeting照片 二.燃尽图 三.项目进展 对前两天完成的功能进行整合 测试完成功能(测试算法是否有bug,界面设计是否人性化,适合用户使用.) 四.困难与问题 在对前两 ...
- 【Beta阶段】第一次scrum meeting
Coding/OSChina 地址 1. 会议内容 学号 主要负责的方向 昨日任务 昨日任务完成进度 接下去要做 9 9 PM 博客编写,会议总结,代码整理 100% 准备下一次会议内容,并对已完成的 ...
- 201521123068 《java程序设计》第8周学习总结
1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结集合与泛型相关内容. 1.2 选做:收集你认为有用的代码片段 泛型,即参数化类型,不考虑类型参数的继承关系,getClass方法的返 ...
- 201521123064 《Java程序设计》第5周学习总结
1. 本章学习总结 1.1 尝试使用思维导图总结有关多态与接口的知识点. 1.2 可选:使用常规方法总结其他上课内容. 对匿名内部类的印象很深(内部类类部类内部内--).总结一下,匿名内部类也就是没有 ...
- 201521123071 《JAVA程序设计》第十二周学习总结
第12周作业-多线程 1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多流与文件线程相关内容. 2. 书面作业 1. 字符流与文本文件:使用 PrintWriter(写),Buff ...
- MD格式示例
一个例子: 例子开始 1. 本章学习总结 今天主要学习了三个知识点 封装 继承 多态 2. 书面作业 Q1. java HelloWorld命令中,HelloWorld这个参数是什么含义? 今天学了一 ...