面向对象 - @property与@synthesize

@property

xcode4之后

在xcode4之后,@property得到增强,使用@property声明之后,会自动进行实现
@property 是一个编译器指令
简化setter和getter的声明和实现,可以使用@property来代替getter/setter方法的声明和实现

使用@property生成了getter和setter的实现,如果重写了setter方法,@property就只会生产getter方法。如果重写了getter方法,@property就只会生成setter方法
在没有声明属性的情况下,使用@property生成getter和setter方法会自动创建成员变量

#import <Foundation/Foundation.h>

@interface Person : NSObject

// 使用@property可以自动生成成员变量的getter和setter方法
// 如果该成员变量没有提前声明,则会自动声明
@property NSString *name;   // 会自动生成一个 _name 的成员变量
@property int age;          // 会自动生成一个 _age 的成员变量

@end

@implementation Person


@end


int main(int argc, const char * argv[]) {
    Person *p = [Person new];
    [p setName:@"张三"];
    [p setAge:18];
    NSLog(@"姓名:%@   年龄:%i", [p name], [p age]);     // 姓名:张三   年龄:18
    return 0;
}

xcode4之前 (作为了解)

在xcode4之前,使用@property和@synthesize简化getter/setter方法的声明和实现

  • @property
    @property 是一个编译器指令
    简化setter和getter的声明,可以使用@property来代替getter/setter方法的声明

  • @synthesize
    @synthesize 是一个编译器指令
    简化setter和getter方法的实现,可以使用@synthesize来代替getter/setter方法的实现

#import <Foundation/Foundation.h>

@interface Person : NSObject
{
    NSString *_name;
    int _age;
    
}

@property NSString *name;   // == - (void)setName:(NSString *)name
@property int age;          // == - (NSString *)name

@end

@implementation Person

@synthesize _name;
@synthesize _age;

@end


int main(int argc, const char * argv[]) {
    Person *p = [Person new];
    [p setName:@"张三"];
    NSLog(@"名称:%@", [p name]);
    return 0;
}

@property 修饰符

@property

  • readwrite:默认就是该修饰符
  • readonly:只读修饰符,让@property只生成getter
  • getter:修改@property生成的getter的方法名
  • setter:修改@property生成的setter的方法名
#import <Foundation/Foundation.h>

@interface Person : NSObject

@property(readwrite) NSString *name;
@property(readonly) int age;
@property(getter=abc) double height;
@property(setter=tizhong:) double weight;

@end

@implementation Person


@end


int main(int argc, const char * argv[]) {

    Person *p = [Person new];
    [p setName:@"张三"];

    NSLog(@"姓名:%@", [p name]);        // 姓名:张三
    
//    [p setAge:18];    // 没有setAge的提示
    NSLog(@"年龄:%i", [p age]);   // 年龄:0
    
    [p setHeight:1.85];
    NSLog(@"身高:%lf", p.abc);    // 身高:1.850000
    
    [p tizhong:165.5];
    NSLog(@"体重:%lf", p.weight);     // 体重:165.500000
    
    return 0;
}
``
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值