Cover image
Hero image

托码特人

分享科技与人文

一个关注互联网的技术博客

属性变量(property)与成员变量的区别

代码笔记

@interface MyViewController :UIViewControlle
{
    UIButton *myButton;
}
@property (nonatomic, retain) UIButton *myButton;
@end

类与类别中添加的属性要区分开来,因为类别中只能添加方法,不能添加实例变量。经常会在 ios 的代码中看到在类别中添加属性,这种情况下,是不会自动生成实例变量的。比如在:UINavigationController.h 文件中会对 UIViewController 类进行扩展

@interface UIViewController (UINavigationControllerItem)
@property(nonatomic,readonly,retain) UINavigationItem *navigationItem;
@property(nonatomic) BOOL hidesBottomBarWhenPushed;
@property(nonatomic,readonly,retain) UINavigationController *navigationController;
@end

总结

这里添加的属性,不会自动生成实例变量,这里添加的属性其实是添加的 getter 与 setter 方法。

注意一点,匿名类别(匿名扩展)是可以添加实例变量的,非匿名类别是不能添加实例变量的,只能添加方法,或者属性(其实也是方法)。

成员变量用于类内部,无需与外界接触的变量。

根据成员变量的私有性,为了方便访问,所以就有了属性变量。属性变量的好处就是允许让其他对象访问到该变量。当然,你可以设置只读或者可写等,设置方法也可自定义。所以,属性变量是用于与其他对象交互的变量。

一些建议

  1. 如果只是单纯的 private 变量,最好声明在 implementation 里.
  2. 如果是类的 public 属性,就用 property 写在.h 文件里
  3. 如果自己内部需要 setter 和 getter 来实现一些东西,就在.m 文件的类目里用 property 来声明
赞赏

声明: 本文内容由托码斯创作整理,由于知识水平和时效性问题,行文可能存在差错,欢迎留言交流。读者若需转载,请保留出处,谢谢!