您的位置:首页 > 移动开发 > Objective-C

Objective-C的成员变量、属性与带下划线属性的总结

2015-12-09 16:54 585 查看
成员变量与属性是不同的,先看如下示例代码:

User.h
文件

#import <Foundation/Foundation.h>

@interface User : NSObject{
// 成员变量
NSString *name;
NSInteger age;//typedef long NSInteger;
}
// 属性
@property(nonatomic,copy)NSString* address;
@property(nonatomic,assign)CGFloat height;

- (void)obtainInfo;

@end


User.m
文件

#import "User.h"
@implementation User{
NSString *info;
}

@synthesize address = _address;
//@synthesize height;

- (void)obtainInfo{
NSLog(@"name = %@",self->name);
NSLog(@"age = %ld",(long)age);
NSLog(@"address = %@",self.address);
NSLog(@"height = %f",self.height);
NSLog(@"info = %@",info);
}

@end


其中,定义成员变量格式(放在大括号中)为:

@interface User:Object{
....
}


或者:

@impletation User{
...
}


而属性则使用
@property(和@synthesize)
定义的。

Xcode推荐的书写成员变量的形式是在变量名前添加下划线
_
,例如:
_name
。成员变量只能通过
->
符号来访问。

对于属性,使用
@property
定义后,系统会自动生成
setter
getter
方法。

可以这样说,一个属性对应着一个成员变量;如果属性只使用
@property
声明,而没使用
@synthesize
的话,系统会自动的给你声明一个
_
开头的实例变量。如果又使用
@synthesize
的话,则相当于声明了一个实例变量,如果
@synthesize address = _address;
,变量名为
_address
;如果
@synthesize address ;
,变量名为
address


在类的内部该如何访问成员变量和属性呢?

如果,成员变量可以直接通过变量名访问,或者
self->...
来访问;对于属性,如果没有定义
@property
,则必须要用
self.属性名
来访问。本质上,属性和成员变量处于一致的状态。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: