欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

编写高质量iOS与OS X代码的52个有效方法 读后感

程序员文章站 2022-06-07 15:58:03
...

只在此总结一些项目中容易忽略的点,可能后期会补充,因为有些块我暂时也没想到怎么总结,所以暂时只有这些。
- 在类的头文件(.h文件)尽量使用@class(向前声明),在类的实现文件(.m文件)中引入需要的头文件,既可以解决相互引用发生的错误,又可以减少编译的时间。
- 多用字面量语法,少用与之等价方法,如NSArray = @[@"hello", @"world"];这种语法糖可以更直观的了解其数组或者字典元素,但是一定要注意,确保每个元素都有值,不能为nil,否则会抛出异常。
- 多用类型常量,少用#define预处理指令,因为#define会增加内存,并且无法定义数据类型。考虑到多人开发,可以创建一个类来统一管理常用的类型常量。推荐苹果官方定义这种UIKIT_EXTERN NSString *const valueName; 如果该类型常量仅在对应的编译单元内使用,则可使用static const关键字来修饰,直接定义在当前的编译单元内。
- 用枚举表示状态、选项,当状态或者选项固定时采用switch判断其条件时可以不写default,这样做的好处是当所传参数不在枚举的类型之中时编译器会报错,当然这就要求开发者编写代码时要对代码执行有充分的认识。
- 用前缀避免命名空间冲突,建议前缀用大于等于三个的字母,因为两个字母的专利已经被苹果所占有了,说不定哪天苹果就搞一个两个字母的系统前缀。
- 提供全能初始化方法,尽量减少外部暴露的变量为可编辑的。防止外部意外修改类的属性。
- 为私有方法加上前缀,比如p_privateryAction
- 当代理次数调用频繁时,可以定义一个BOOL值,然后在setDelegate:方法中通过responsToSelector方法设置这个BOOL值,从而在下次回调代理方法的时候只需要判断这个值即可,而不需要每次都通过responsToSelector判断是否设置了代理并实现了代理方法。
- 以“自动释放池快”(autorelease)来降低内存峰值。最简单的就是在for循环中,当for循环中需要不断创建临时对象时,这个时候,因为当前的线程还没有执行下一次事件,所以此时临时对象会保存在内存当中不会释放。所以可以采用下面这种方式:

    for (int i = 0; i < 10000; i++) {
        @autoreleasepool {
            Person *person = [[Person alloc] init];
            [_mutableArr addObject:person];
        }
    }
相关标签: 52个建议 ios