1. 在.h文件中声明属性
2. 在.m文件属性的实现
3. 在.m文件中的@synthesize 可以省略了
4. 在.h文件中的成员变量声明部分可以省略
属性的三大作用:
1. 声明了成员变量(可见度 : 私有的)
2. 声明了setter 和 getter 方法
3. 实现了setter 和 getter 方法
创建Person类
Person.h
属性声明
1. 关键字@property
2. 属性前面没有下划线 _
3. 相当于声明了setter和getter方法
//成员变量
{
NSString *_name;
}
//属性
@property (nonatomic,retain)NSString *name;
Person.m
属性的实现
1.关键字 @synthesize
2.相当于实现了setter 和 getter 方法
// 关联, 成员变量给属性赋值 (写属性的话可以省略这句话)
@synthesize name = _name;
//setter 和 getter 都是给成员变量赋值!!不能写属性!递归崩溃!
-(void)setName:(NSString *)name
{
_name = name;
}
-(NSString *)name
{
return _name;
}
main.m
Person *person1 =[[Person alloc]init];
//消息语法
[person1 setName:@"Yuno"];
NSLog(@"%@", [person1 name]);
//点语法 (= 左边一般是setter方法 右边一遍是getter方法)
person1.name = @"Lechter";
NSLog(@"%@", person1.name);
/* KVC 使用*/
[person1 setValue:@"BigMonkey" forKey:@"name"];
/* 便利构造器 */
创建Student类
Student .h
@property(nonatomic, retain)NSString *name;
@property(nonatomic, assign)NSInteger age;
@property(nonatomic, retain)NSString *sex;
//自定义初始化
- (id)initWithName:(NSString *)name
age:(NSInteger)age
sex:(NSString *)sex;
/****便利构造器*******/
+ (id)personWithName:(NSString *)name
sex:(NSString *)sex
age:(NSInteger)age;
Student.m
//自定义初始化
- (id)initWithName:(NSString *)name age:(NSInteger)age sex:(NSString *)sex
{
self = [super init];
if (self) {
self.name = name;
self.age = age;
self.sex = sex;
}
return self;
}
/**便利构造器**/
+ (id)studentWithName:(NSString *)name
sex:(NSString *)sex
age:(NSInteger)age
{
Student *stu = [[Student alloc] initWithName:name age:age sex:sex];
return stu;
}
main.m
Student *stu = [Student studentWithName:@"Yuno" sex:@"女" age:20];