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开发注意事项(一)的更多相关文章

  1. ios开发注意事项小总结

    一.LaunchScreen LaunchScreen产生原因:代替之前的启动图片 好处: 1.可以展示更多的东西 2.可以只需要出一个尺寸的图片. 启动图片的优先级 启动图片 < Launch ...

  2. IOS 开发中要注意的事项

    1.关于拍摄 TGCameraViewController – 基于 AVFoundation 的自定义相机.样式漂亮,轻量并且可以很容易地集成到 iOS 项目中.不会内存吃紧 2.block 中对控 ...

  3. iOS开发系列--App扩展开发

    概述 从iOS 8 开始Apple引入了扩展(Extension)用于增强系统应用服务和应用之间的交互.它的出现让自定义键盘.系统分享集成等这些依靠系统服务的开发变成了可能.WWDC 2016上众多更 ...

  4. iOS开发系列--通知与消息机制

    概述 在多数移动应用中任何时候都只能有一个应用程序处于活跃状态,如果其他应用此刻发生了一些用户感兴趣的那么通过通知机制就可以告诉用户此时发生的事情.iOS中通知机制又叫消息机制,其包括两类:一类是本地 ...

  5. IOS开发基础知识碎片-导航

    1:IOS开发基础知识--碎片1 a:NSString与NSInteger的互换 b:Objective-c中集合里面不能存放基础类型,比如int string float等,只能把它们转化成对象才可 ...

  6. iOS开发 Xcode8中遇到的问题及改动

      iOS开发 Xcode8中遇到的问题及改动 新版本发布总会有很多坑,也会有很多改动. 一个一个填吧... 一.遇到的问题 1.权限以及相关设置 iOS10系统下调用系统相册.相机功能,或者苹果健康 ...

  7. iOS开发系列--C语言之基础知识

    概览 当前移动开发的趋势已经势不可挡,这个系列希望浅谈一下个人对IOS开发的一些见解,这个IOS系列计划从几个角度去说IOS开发: C语言 OC基础 IOS开发(iphone/ipad) Swift ...

  8. iOS开发-UI 从入门到精通(三)

    iOS开发-UI 从入门到精通(三)是对 iOS开发-UI 从入门到精通(一)知识点的综合练习,搭建一个简单地登陆界面,增强实战经验,为以后做开发打下坚实的基础! ※在这里我们还要强调一下,开发环境和 ...

  9. iOS开发-UI 从入门到精通(二)

    iOS开发-UI 从入门到精通(二)是对 iOS开发-UI 从入门到精通(一)知识点的巩固,主要以习题练习为主,增强实战经验,为以后做开发打下坚实的基础! ※开发环境和注意事项: 1.前期iOS-UI ...

随机推荐

  1. Sqlite数据库添加数据以及查询数据方法

    只是两个添加查询方法而已,怕时间长不用忘了

  2. Domain Driven Design

    在Spring官网的第一个tutorial中看到了这种 设计模式 Domain Driven Design 找到了篇介绍这个得文章: What is Domain Driven Design? &qu ...

  3. Java 多线程(四) 多线程访问成员变量与局部变量

    先看一个程序例子: public class HelloThreadTest { public static void main(String[] args) { HelloThread r = ne ...

  4. 团队作业8——第二次项目冲刺(Beta阶段)--5.25 5th day

    团队作业8--第二次项目冲刺(Beta阶段)--5.25 fifth day Day five: 会议照片 项目进展 Beta冲刺的第四天,以下是今天具体任务安排: 队员 昨天已完成的任务 今日计划完 ...

  5. 201521123110 《Java程序设计》第4周学习总结

    1. 本周学习总结 1.1 尝试使用思维导图总结有关继承的知识点. 1.2 使用常规方法总结其他上课内容. private不对用户公开进行修改,public用户可以进行修改.代码可以进行继承,即子类继 ...

  6. 201521123010 《Java程序设计》第2周学习总结

    1. 本周学习总结 这周学习了在JAVA里各种数据类型的使用.各种运算符的使用.表达是的使用,还初步学习了枚举的用法,也掌握了一些枚举和switch语句结合的用法,还了解了一些字符串类.在实验课上也学 ...

  7. Hyperledger Fabric 1.0 从零开始(七)——启动Fabric多节点集群

    5:启动Fabric多节点集群 5.1.启动orderer节点服务 上述操作完成后,此时各节点的compose配置文件及证书验证目录都已经准备完成,可以开始尝试启动多机Fabric集群. 首先启动or ...

  8. python列表补充、循环

    优先掌握部分 切片l=['a','b','c','d','e','f']print(l[1:5])print(l[1:5:2])print(l[2:5])print(l[-1])了解print(l[- ...

  9. 用户登陆注册【JDBC版】

    前言 在讲解Web开发模式的时候,曾经写过XML版的用户登陆注册案例!现在在原有的项目上,使用数据库版来完成用户的登陆注册!如果不了解的朋友,可以看看我Web开发模式的博文! 本来使用的是XML文件作 ...

  10. Spring - bean的依赖关系(depends-on属性)

    depends-on是bean标签的属性之一,表示一个bean对其他bean的依赖关系.乍一想,不是有ref吗?其实还是有区别的,<ref/>标签是一个bean对其他bean的引用,而de ...