属性

//在华括号内声明实例变量

//{

//    NSString *_name;

//    int _age;

//}

 

//属性声明在括号外

//@property系统自动生成一套方法 setter  getter方法

//@property后面的叫属性 ,而{}叫实例变量。

//属性的作用:自动生成getter setter方法;如果没有和属性对应的实例变量,系统自动帮我们生成这些实例变量(_属性);(系统根据属性自动帮我们生成的实例变量,默认是私有的, 子类不能继承。但是子类可以继承属性)

//对于属性的属性:retain assign copy,系统默认是assign

//对于属性,系统默认帮我们生成setter 和 getter方法,是因为系统默认属性的读写权限时readwrite,如果改成readonly就是只读不能写,也就是只有getter 方法,没有setter方法

@property (nonatomic , retain) NSString *name;

@property (nonatomic , assign) int age;

@property (nonatomic , retain) NSString *gender;//性别

@property (nonatomic , copy) NSString *telephone;

//setter getter方法

//- (void)setName:(NSString *)name;

//- (NSString *)name;

//

//- (void)setAge:(int)age;

//- (int)age;

//

- (instancetype)initWithName:(NSString *)name andAge:(int)age;

 

+ (instancetype)personWithName:(NSString *)name andAge:(int)age;

 

 

Person *p1 = [Person personWithName:@"laingtong" andAge:23];

        

        //当点语法,在赋值符号(=)左边时,相当于把(=)右边的 东西赋值给左边的东西,这时候就相当于setter方法

        //当点语法,没有在=左边,在任何位置的时候,都相当于走了getter方法

        

        p1.name = @"jhdk";

        //用属性的方式打印name和age,通过点语法

        NSLog(@"name:%@ , age:%d" , p1.name , p1.age);

 

 

 

系统setter  getter方法

// name的setter getter

- (void)setName:(NSString *)name

{

    if (_name != name) {

        //对于retain修饰的属性,系统时这样帮我们实现的

        //把这个实例变量释放

        [_name release];

        //

        _name = [name retain];

    }

}

- (NSString *)name

{

    return [_name retain];

}

 

//age 的setter getter

- (void)setAge:(int)age

{

    if (_age != age) {

        _age = age;

    }

}

- (int)age

{

    return _age;

}

 

posted @ 2015-05-09 11:41  fengkuangIT  阅读(172)  评论(0编辑  收藏  举报