美文网首页
开发笔记 (一)

开发笔记 (一)

作者: ricefun | 来源:发表于2018-03-02 11:26 被阅读4次

    一.断言
    NSAssert

    int a = 1;
    NSCAssert(a == 2, @"a must equal to 2"); //第一个参数是条件,如果第一个参数不满足条件,就会记录并打印后面的字符串
    

    NSParameterAssert

     NSString *b = @"sdssss";
     NSParameterAssert(b); //只需要一个参数,如果参数存在程序继续运行,如果参数为空,则程序停止打印日志
    

    二.基本数据类型

                    整型 int  
                                         单精度 float
    

    基本数据 浮点型
    双精度 double
    字符型 char

    --- 类型限定修饰词
    short 短型,修饰int 、double
    long 长型,修饰int、 double
    singed 有符号,修饰 int、 char
    unsinged 无符号,修饰 int、char

    1.这些限定词经常用来限定int型,在限定int类型时int可以省略;
    2.short和long会改变int型的长度,在不同编译器长度不相同,但是一般short长度不大于int,int长度不大于long;
    3.signed和unsigned不会改变类型长度,仅表示最高位是否为符号位,其中unsigned表示大于等于0的正数;

    -----取值范围,下面是部分数据类型的取值范围:
    int:-2147483648~2147483647
    unsigned int:0~4294967295
    short:-32768~32767
    unsigned short:0~65535
    long: -2147483648~2147483647

    ----存储空间
    下面列出的是常用数据类型占用的存储空间
    数据类型 16位编译器 32位编译器 64位编译器
    char 1byte 1byte 1byte
    int 2byte 4byte 4byte
    float 4byte 4byte 4byte
    double 8byte 8byte 8byte
    short int 2byte 2byte 2byte
    unsigned int 2byte 4byte 4byte
    long 4byte 4byte 8byte
    unsigned long 4byte 4byte 8byte
    long long 8byte 8byte 8byte

    关于这些基本数据类型,平时用的时候有几点需要注意一下:
    1.char类型是最小的数据类型(任意编译器下都是占1Byte),char类型的变量可以赋值某个字符、也可以赋值ASCII值;
    2.可以使用long long来修饰一个整型,但是long long不能修饰double;
    3.不存在short short;
    4.浮点型常量后面加f,编译器认为是float类型,否则是double类型;

    三、内联函数
    作用:提高函数的执行效率,减少调用函数的开销

    四、static & extern & const
    1.static 修饰局部变量:这个变量只能初始化一次;作用域只能是在当前函数中,外部不能引用;延长局部变量的声明周期,直到整个项目结束
    static 修饰全局变量:同样只能初始化一次;当写在.h作用域是整个项目,当写在.m作用域是当前文件;在不同文件中 a的值指跟有当前文件确定 不再记录上次的值 相当于不同的对象 但是都是静态变量

    2.extern 用于其他类能够引用变量 例如,想引用其他类的全局变量,int age = 10;则在当前类中实现,extern int age;

    3.const 右侧的不能被修改

    //const修饰的*p,被const修饰的*p只能被赋值一次,以后不能赋值,否则编译器报错
    // const修饰的*p
        const int *p = NULL;
        int const *p = null;
    
        *p = 20; // 编译器报错,不能修改*p的值
    
    //const修饰的p,被const修饰的p只能存一次地址,以后再也不能其它存地址了,否则编译器报错  即“只读(readonly)”
    // const修饰的指针变量p
        int * const p = NULL;
        int a = 20;
    
        p = &a; // 编译器报错,不能修改指针变量p
    

    extern 和 const联用

    .h
    UIKIT_EXTERN NSString * const rfString;
    .m
    NSString * const rfString = @"riceFun";
    

    五、Objective-C 中 nullable、__nullable、_Nullable 的区别
    __nullable 表示对象可以是 NULL 或 nil,而 __nonnull 表示对象不应该为空。

    用法:
    对于属性、方法返回值、方法参数的修饰,使用:nonnull/nullable;

    声明属性的修饰:
    @property (nonatomic, copy, nullable) NSString *aString;
    
    方法返回值修饰:
    - (nullable NSString *)method;
    
    方法参数修饰:
    - (void)methodWithString:(nullable NSString *)aString;
    

    对于 C 函数的参数、Block 的参数、Block 返回值的修饰,使用:_Nonnull/_Nullable,建议弃用 __nonnull/__nullable。

    // 注意下面的 nullable 用于修饰方法传入的参数 Block 可以为空,而不是修饰 Block 返回值;
    - (void)methodWithBlock:(void (^ _Nullable)())block;
    
    // 注意下面的 nullable 用于修饰方法传入的参数 Block 可以为空,而 __nonnull 用于修饰 Block 返回值 id 不能为空;
    - (void)methodWithBlock:(id _Nonnull (^ _Nullable)(id _Nullable params))block;
    

    相关文章

      网友评论

          本文标题:开发笔记 (一)

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