第五天-增强的@property

//
//  main.m
//  02-增强的@property
//
//  Created by Apple on 14/11/23.
//  Copyright (c) 2014年 itcast. All rights reserved.
//

#import <Foundation/Foundation.h>
#import "CZPerson.h"

#import "CZStudent.h"
int main(int argc, const char * argv[]) {
    
    CZPerson *person = [CZPerson new];
    person.age = 20;
    
//    [person setAge:30];
//    [person age];
    NSLog(@"%d",person.age);
    
//  当我们学了这个存取器方法和点语法之后,以后就很少见到使用->来操作成员变量了
    
//    person.name = @"小明";
    NSLog(@"%@",person.name);
    
    
//  创建一个学生对象
//    CZStudent *stu  = [CZStudent new];
//    
//    stu.age = 10;
//    
//    NSLog(@"%@",stu);
    
    
    
    
    return 0;
}


//
//  CZPerson.h
//  1123-知识点回顾
//
//  Created by Apple on 14/11/23.
//  Copyright (c) 2014年 itcast. All rights reserved.
//

#import <Foundation/Foundation.h>
/*
  在Xcode4.4之后,对象@property进行了一个增强
  直接在类的声明中可以通过@property生成setter 和 getter 方法的声明和实现
                      同时它还好生成一个私有的成员变量 _属性名称
 
 */
@interface CZPerson : NSObject

//年龄
//atomic 原子的,它调用setter方法的时候会进行加锁操作(了解)
//nonatomic 非原子的,它的速度会比较快

@property (nonatomic) int age;



//姓名
//在中间的小括号中如果加上一个readonly的关键字,那么@property就只生成getter方法,不会生成setter方法了
//readonly 就表示只读
@property (readonly) NSString * name;


@end


//
//  CZPerson.m
//  1123-知识点回顾
//
//  Created by Apple on 14/11/23.
//  Copyright (c) 2014年 itcast. All rights reserved.
//

#import "CZPerson.h"
/*
   此处必须要会的:
 
   在使用@property增强的时候如何自定义setter方法
   1、如果你实现自定义的setter方法,@property就不会帮你生成它的setter方法,但仍然会帮你生成getter方法和私有的成员变量
   2、如果你实现自定义的getter方法,@property就不会帮你生成它的getter方法,但仍然会帮你生成setter方法和私有的成员变量
 
   3、如果你同时实现自定义的setter 和 getter方法,@property就不会帮你生成它的setter 和 getter方法,同时也不会帮你生成私有成员变量了
 */
@implementation CZPerson
{
//  一般都实现中声明一个私有的
    int _age;
}

- (void) setAge:(int)age
{
    if (age >= 0) {
//        self.age = age; //这样写会死循环
        _age = age;
    }
}

- (int) age
{
    return _age + 10;
}


-(NSString *) description
{
    return [NSString stringWithFormat:@"age = %d",_age];
}
@end


//
//  CZStudent.h
//  1123-知识点回顾
//
//  Created by Apple on 14/11/23.
//  Copyright (c) 2014年 itcast. All rights reserved.
//


#import "CZPerson.h"

@interface CZStudent : CZPerson

@end


//
//  CZStudent.m
//  1123-知识点回顾
//
//  Created by Apple on 14/11/23.
//  Copyright (c) 2014年 itcast. All rights reserved.
//

#import "CZStudent.h"

@implementation CZStudent


- (NSString *)description
{
// 这里访问@property生成的私有成员变量的,因为这个私有成变量是在CZPerson实现文件中
//  self->_age 这里没有
//  如果想访问父类的成员变量只能通过调用存取器方法
    return [NSString stringWithFormat:@"age = %d",self.age];
}

@end


你可能感兴趣的:(第五天-增强的@property)