**浅述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++一样,用->来调用。
有理解不到位的地方欢迎大家指出!!!
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++一样,用->来调用。
有理解不到位的地方欢迎大家指出!!!
相关文章推荐
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 不可修补的 iOS 漏洞可能导致 iPhone 4s 到 iPhone X 永久越狱
- iOS 12.4 系统遭黑客破解,漏洞危及数百万用户
- 每日安全资讯:NSO,一家专业入侵 iPhone 的神秘公司
- [转][源代码]Comex公布JailbreakMe 3.0源代码
- js判断客户端是iOS还是Android等移动终端的方法
- IOS开发环境windows化攻略
- java中静态变量和实例变量的区别详细介绍
- C#不同类型的成员变量(字段)的默认值介绍
- .net平台推送ios消息的实现方法
- C#静态变量与实例变量实例分析
- 探讨Android与iOS,我们将何去何从?
- Android、iOS和Windows Phone中的推送技术详解
- C++空类及没有成员变量的类的大小实例分析
- C#中属性和成员变量的区别说明
- IOS 改变键盘颜色代码
- Android和IOS的浏览器中检测是否安装某个客户端的方法
- javascript实现阻止iOS APP中的链接打开Safari浏览器