先简单说下,实例变量跟属性的字面意思;实例变量是用来存储对象的各种数据的,属性说白了就是getter和setter方法。
其中我看过一本资料是这么描述的:实例变量一般通过“存取方法”来访问的。存取方法不就是属性么,于是乎,那句话可以
换成:实例变量一般通过属性来访问。
如果说以上大家能看明白最好,如果不明白。请往下看:
先上代码:定义一个类,这个类有两个实例变量;
@interface LDTestModel :NSObject {
@public
NSString*_firstName;
NSString*_lastName;
@end
#import "LDTestModel.h"
@implementationLDTestModel
@end
这样的话,只是简单的定义了实例变量;而在外部无法给这两个实例变量负值。有java功底的都知道,得写set和get方法,于是乎定义好的类就变成了这个:
#import <Foundation/Foundation.h>
@interface LDTestModel :NSObject {
@public
NSString *_firstName;
NSString *_lastName;
@private
NSString *_age;
}
- (void)setFirstStr:(NSString *)str;
- (NSString *)getFirstName;
- (void)setlastStr:(NSString *)str;
- (NSString *)getLastName;
@end
#import"LDTestModel.h"
@implementation LDTestModel
- (void)setFirstStr:(NSString *)str {
_firstName = str;
}
- (NSString *)getFirstName {
return _firstName;
}
- (void)setlastStr:(NSString *)str {
_lastName = str;
}
- (NSString *)getLastName {
return _lastName;
}
@end
这样确实可以给实例变量负值([modlesetFirstStr:@"lida"])和取值([modle getFirstName]) ,
咱们可以尝试改改get方法;
- (NSString *)firstStr;
- (NSString *)lastStr;
此处有彩蛋,突然发现,可以用 . 语法来取值和负值。好啦,答案就在于此,居然用到了点语法,很明显不知不觉中,我们就用到了属性;
modle.firstStr =@"lida";
NSLog(@"%@",modle.firstStr);
对此苹果于似乎就给我们提供了一个标签 叫做 property ;
@property NSString *firstStr;就等价于:
- (void)setFirstStr:(NSString):str;
- (NSString *)firstStr;
最关键的是 property 标签不仅自动生成get set 方法,其实它也默默得给我们 生成了一个 _firtStr 的实例变量;由于以上代码的
实现文件中我们重写了get set 方法;而现如今我们在代码中不需要重新(在ARC中,自动管理内存). 最后我们的代码就成以下情况:
#import <Foundation/Foundation.h>
@interface LDTestModel :NSObject
@property (nonatomic,copy) NSString *firstName;
@property (nonatomic,copy) NSString *lastName;
@end
#import "LDTestModel.h"
@implementation LDTestModel
@end
如有不足之处,还望指点。