ios中property与@synthesize

使用property会自动生成get与set方法。

@interface Time : NSObject
//property会自动生成set与get方法
@property int hour;
@property int minute;
@property int second;
-(void)show;
@end


@implementation Time
-(void)show
{
    NSLog(@"%02i:%02i:%02i",_hour,_minute,_second);
}
@end


- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    Time *tm=[[Time alloc]init];
    tm.hour=23;
    tm.minute=12;
    tm.second=34;
    [tm show];
}

再次修改set方法

@implementation Time
//自定义hour
-(void)setHour:(int)hour
{
    if (hour>24 || hour<0) {
        //self.hour=0;此处不能使用self.语法,会造成死循环,set->self->set
        _hour=0;
    }
    _hour=hour;
}
-(void)show
{
    NSLog(@"%02i:%02i:%02i",_hour,_minute,_second);
}
@end

再进行修改加上synthesize关键字

#import <Foundation/Foundation.h>

@interface Time : NSObject
{
    //不会自动生成get与set
    int _hour;
    int _minute;
    int _second;
}
//property会自动生成set与get方法
@property int hour;
@property int minute;
@property int second;
-(void)show;
@end



#import "Time.h"

@interface Time()
@end

@implementation Time
//实现自动生成
@synthesize hour;
@synthesize minute;
@synthesize second;

-(void)show
{
    NSLog(@"%02i:%02i:%02i",_hour,_minute,_second);
}
@end

上面打印结果如下
在这里插入图片描述
那为何会打印输出的全部是0呢?原因就是synthesize会在成员变量中寻找hour,minute,second但是成员变量中只有_hour,_minute,_second。所以找不到,就会自动生成hour,minute,second成员变量。最后打印的是没有经过赋值的_hour等成员变量,就为0。
最后修改方法如下。
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值