Object-C 细微知识点

关于实例变量与属性

@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 细微知识点)