美文网首页
第一章:熟悉OC

第一章:熟悉OC

作者: LucXion | 来源:发表于2016-10-31 22:08 被阅读0次

    OC语言特性:
    -1. OC是在C的语言基础上添加了面向对象特性

    -2. OC与C++,JAVA等面向对象的语言类似,采用的是一个“消息结构”而非”函数调用“,OC是由SmallTalk演化而来。
    消息与函数调用的关键区别在于: 使用消息结构的语言,其运行时所执行的代码由运行环境来决定”动态绑定",而使用函数调用语言,则有编译器决定。

    OC的重要工作都由”运行期组件“(runtime component)而非编译器完成,使用OC的面向对象特性所需的全部数据结构和函数都在运行期组件上面。运行期组件上面含有全部内存管理的方法,运行期组件本质上就是一种与开发者代码相连接的动态库,其代码能把开发者编写的所有程序黏合起来。这样,只需要更新运行期组件就能提升应用程序性能。

    -3. OC的内存分配

    NSString *str = @”test“
    

    对象所占内存都在堆控件中(heap space)
    栈帧”stack frame“里分配了一块地址,内存大小可以容下一枚指针,32位架构的计算机上是4字节,64位计算机上面是8字节
    分配在堆中的内存必须直接管理,而分配在栈上用于保存变量的内存则会在其栈帧弹出时自动清理

    在OC代码中,不含*的变量可能用到栈空间(stack space),这些变量不会保存OC对象,比如CoreGraphics中的CGRect,整个系统框架都在使用这种结构体,因为如果改用OC对象来做的话,性能会受影响

    • 技巧一: 引入头文件

    尽量延后引入头文件的时机,避免在引用过程中一次性引入所有文件,增加编译时间
    解决办法: 在.h 声明文件中,通过 @class 类名 (向前声明)
    向前声明同时也解决了两个类相互引用的问题, 因为用import虽然可以解决,但是里面会有一个类无法被正确编译

    特殊情况: 当引用的类遵守协议的时候,建议通过分类来遵守这些协议的实现

    • 技巧二:多使用字面化语法
    例如 NSarray *arr = @[@“s”,@“b”]  不要用 NSarray *arr = [[NSarray alloc]init];
    NSNumber *num = @1
    NSNumber *num = @1.0f
    NSNumber *num = @1.0812
    NSNumber *num = @YES
    NSNumber *num = @“a”
    NSNumber *num = @(x * y)
    语法糖陷阱: 
    NSArray *array = @[@"1",temp,@"1”];
    NSArray *array = [NSArray arrayWithObjects:@"1", nil,@"1"];
    当temp == nil, 第一种创建数组的方式会崩溃, 第二种创建数组的方式只存入1个对象
    

    总结:

    1. 使用字面量语法创建数组,字典,字符串,字符
    2. 通过下标操作来访问数组或者字典
    3. 用字面量创建数组,字典时,遇到nil会抛出异常,注意不要添加nil对象
    • 技巧三: 避免使用宏定义
    static const NSTimeInterval kTimeDuring = 3;
    

    注意: 命名规范,当一个变量局限于某一编译单元(.m文件)内,应该加上k
    千万不要在声明文件中宏定义,这等于是创建了一个全局变量,容易出错
    本质:其实同时使用static和const,编译器不会创建符号,而是像#define一样处理

    技巧四: 多使用枚举

    定义: 
    typedef enum : NSUInteger {
        TestOne   = 1 << 0,
        TestTwo   = 1 << 1,
        TestThree = 1 << 2,
    } TestType;
    
    使用: 
        if ((type & TestOne) > 0) {
            NSLog(@"One");
        }
        if ((type & TestTwo) > 0) {
            NSLog(@"Two");
        }
    

    相关文章

      网友评论

          本文标题:第一章:熟悉OC

          本文链接:https://www.haomeiwen.com/subject/muyuuttx.html