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来申明全局变量,并在相关实现文件中定义其值。这种常量要出现在全局符号表中,所以其名称用前缀应加以区分。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • importUIKit classViewController:UITabBarController{ enumD...
    明哥_Young阅读 3,942评论 1 10
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,185评论 19 139
  • 重点掌握 3 类对象和方法 对象就是一个物体 类的独特存在就是一个实例,对实例进行操作叫做方法。方法可以应用于类或...
    Coder大雄阅读 1,288评论 0 2
  • 1. 使用 #import 相对c的 include 是防止头文件的重复导入 2. NSLog 相对于 print...
    迎风起飞的猪阅读 1,812评论 6 9
  • 昨天看了一本书上说早晨应该给自己一段时间放空,知道今天自己需要干些什么。 于是,在今天的五点四十,我拉开窗帘,靠在...
    星杳阅读 323评论 4 6