美文网首页iOS Developer
Object-C 细微知识点

Object-C 细微知识点

作者: 践行者 | 来源:发表于2017-01-19 18:00 被阅读59次

    关于实例变量与属性

    @interface myClass
    {
    @public
    NSMutableArray * tempArray;
    }

    @property (nonatomic,copy) NSArray * tempArray;
    @end

    • 实验一
      实例变量 与 属性 重名但是类型不同的问题,这种情况下会被视为两个变量。其中实例变量tempArray被视为可变长的,但是属性tempArray则是不变长的,在main函数中,两者的调用方式是不同的,属性的调用有自己专用的“.”符号,就是说 假如对象名为tttt ,那么tttt.tempArray 访问的是属性,而tttt->tempArray则是访问的实例变量(注意要声明@public 否则默认为@protected)。

    • 实验 二
      如果实例变量与属性 同名且又同类型 会被怎样识别呢 ?
      答案与上面的实验结果相同 仍旧被识别为两个变量

    • 实验三
      给实例变量名称添加了下划线符号 即:_tempArray 而且属性为tempArray ,并且两者的类型要一样, 这个时候被识别为同一个地址,同一个对象。

    BOOL 陷阱

    整形的转换为BOOL 型的时候要小心。

    BOOL 在Objective-C里被定义为unsigned char,这意味着它不仅仅只有YES (1)和NO (0)两个值。不要直接把整形强制转换为BOOL 型。
    对BOOL值使用逻辑运算(&&, ||, ! )都是有效的。

    常量

    • 在实现文件中使用static const来定义只在编译单元内可见的常量。由于此类常量不在全局符号表中,所以无需为其名称加前缀。

    • 在头文件中使用extern来申明全局变量,并在相关实现文件中定义其值。这种常量要出现在全局符号表中,所以其名称用前缀应加以区分。

    相关文章

      网友评论

        本文标题:Object-C 细微知识点

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