您的位置:首页 > 移动开发 > IOS开发

**浅述IOS成员变量(Member variables)和实例变量(Instance varialbes)的区别**

2015-08-11 10:30 477 查看
1,Member variables  可以声明在.h 和.m 中有一定的作用域 。成员变量默认外部访问不到,子类要访问,就要在h文件中申明。

OC属性在h文件中和在m文件中声明是有区别的。区别就是,在h文件中声明的属性,外部类可以通过“类实例.属性”来调用,但在m文件中声明的则不可以获取setter and getter方法,只能是通过setValue:forKey和valueForKey来实现。

位于h声明文件中的变量(deafult  @protected)

#import <UIKit/UIKit.h>

@interface CurrentDetailViewController : BaseViewController{

 //括号里边的都属于成员变量

    ProductDetails *myProductDetails;

    float cellH;

    int cellCount;

    UITapGestureRecognizer*singleRecognizer;

*//另外一种情况 在外部可以使用->调用*

  @private 私有

  NSString  private;

  @protected 默认

  NSString  protected;

  @public  公开

  NSString  public;

  @package 一般很少用(对于framework内部相当于protected 对于framework外部相当于private)

  NSString  package;

  

}

//实例变量(属性)

@property   (strong, nonatomic) NSString    * productCode;

@property   (strong, nonatomic) NSString    * productName;

@property   (strong, nonatomic) NSString    * sellOrderNo;

@end

**//位于m实现文件中的变量(deafult  @private)**

@interface RegularDetailViewController ()

{

    ProductDetails *myProductDetails;

    float cellH;

    int cellCount;

}

@property (strong, nonatomic) UITableView *myTableView;

@property (strong, nonatomic) UILabel *labelShow;

@property (strong, nonatomic) UIView *buyView;

@property (strong, nonatomic) UIButton *buyBtn;

@property (strong, nonatomic) BaseWebViewController *baseWeb;

@end

@implementation RegularDetailViewController

- (void)viewDidLoad {

//调用例子

CurrentDetailViewController *currentDetailViewController = [[CurrentDetailViewController alloc]init];

CurrentDetailViewController ->public = @"";

CurrentDetailViewController ->private = @"";

CurrentDetailViewController ->protected = @"";

CurrentDetailViewController ->package = @"";

}

@end

2,Instance varialbes  OC里边的属性 其实就是实例变量。属性默认只能是对象形式存在。像  int  count;  就是一个成员变量。  而 NSString * name;  是一个实例变量。通俗点就是基本数据类型和构造类型不能被称之为实例变量。

 至于 id date/data 应该属于成员变量还是实例变量呢?  因为 id 是 OC特有的泛型指针类型。从本质上讲, id 等同于 (void *)。 

 所以 id date/data 应属于 实例变量。

需要注意的是

成员变量,有四种权限,就是大家都知道的@private、@protected、@public 、@package 写在.m文件中时,相当于是@private权限,子类无法访问。

而写在.h文件中,默认是@protected权限,子类可以访问,可以做权限修改。

因为访问权限指针指向.h文件。.h文件中成员变量,外部实例对象对其的调用,跟C++一样,用->来调用。  

有理解不到位的地方欢迎大家指出!!!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息