码迷,mamicode.com
首页 > 其他好文 > 详细

oc28--Property增强

时间:2017-08-22 23:14:40      阅读:208      评论:0      收藏:0      [点我收藏+]

标签:使用   object   声明   property   etag   生成   一个   而不是   成员   

//
//  Person.h

#import <Foundation/Foundation.h>

@interface Person : NSObject
/*
{
    @public
    int _age;
    int age;
}
 */

/*
 从Xcode4.4以后apple对@property进行了一个增强, 以后只要利用一个@property就可以同时生成setter/getter方法的声明和实现
 没有告诉@property要将传入的参数赋值给谁, 默认@property会将传入的属性赋值给_开头的成员变量
 
 @property有一个弊端: 它只会生成最简单的getter/setter方法的声明和实现, 并不会对传入的数据进行过滤
 如果想对传入的数据进行过滤, 那么我们就必须重写getter/setter方法
 如果不想对传入的数据进行过滤, 仅仅是提供一个方法给外界操作成员变量, 那么就可以使用@property
 
 如果利用@property来生成getter/setter方法, 那么我们可以不写成员变量, 系统会自动给我们生成一个_开头的成员变量
 注意: @property自动帮我们生成的成员变量是一个私有的成员变量, 也就是说是在.m文件中生成的, 而不是在.h文件中生成的
 */
// age? _age; _age
/*
 - (void)setAge:(int)age;
 - (int)age;
 */
@property int age;  //就可以使用[p setAge:-88],[p age],因为自动生成了这些get,set方法。

@end
//  Person.m

#import "Person.h"

@implementation Person

/*
 - (void)setAge:(int)age
 {
    _age = age;
 }
 - (int)age
 {
    return _age;
 }
 */

// 如果重写了setter方法, 那么property就只会生成getter方法
// 如果重写了getter方法, 那么property就只会生成setter方法
// 如果同时重写了getter/setter方法, 那么property就不会自动帮我们生成私有的成员变量,就要自己重新定义变量。
/*- (void)setAge:(int)age
{
    if (age < 0) {
        age = 0;
    }
    _age = age;
}

- (int)age
{
    return _age;
}*/
@end
//
//  main.m
//  Property增强

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

int main(int argc, const char * argv[]) {
    Person *p = [Person new];
    [p setAge:-88];
    NSLog(@"age = %i", [p age]);
    NSLog(@"_age = %i, age = %i", p->_age, p->age);//私有的
    return 0;
}

 

oc28--Property增强

标签:使用   object   声明   property   etag   生成   一个   而不是   成员   

原文地址:http://www.cnblogs.com/yaowen/p/7413938.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!