@synthesize

博客探讨了Xcode中@property的使用。Xcode4时,@property只能生成getter、setter声明;Xcode5起可自动生成成员变量及声明和实现。重写getter和setter时,默认变量无效,可手动定义变量或用@synthesize指定变量绑定属性,还介绍了相关示例及用途。

Xcode4时,@property只能生成getter、setter方法的声明;

从Xcode5开始,@property 可以自动生成_propertyName成员变量和getter、setter方法的声明和实现。默认情况下,getter、setter方法作用于_propertyName变量。

但是,当同时重写getter和setter两个方法的时候,实现了完全的自定义实现,无法对应到默认的变量_propertyName,_propertyName就无效了,需要手动定义一个变量或者使用@synthesize指定一个变量来绑定到属性上。

一、手动定义变量

Girl.h

#import <Foundation/Foundation.h>
@interface Girl : NSObject
@property (nonatomic, copy) NSString *name;
@property (nonatomic, copy) NSString *boyFriend;
@end

Girl.m

#import "Girl.h"

@implementation Girl
/* *************** MARK: 方法一 *************** */
{
    NSString* _name; //手动注册变量
}
- (NSString *)name{
    if (!_name) {
        _name = @"zhangli";
    }
    return _name;
}
- (void)setName:(NSString *)name{
    _name = name;
}

@end

如果不去手动定义一个变量,那么单独写getter或setter没有问题,但是同时重写就会报错了。

二、@synthesize

/* *************** MARK: 方法二 *************** */
@synthesize boyFriend = man; //使用@synthesize,将属性对应于变量
- (NSString *)boyFriend {
    if (!man) {
        man = @"Jerod";
    }
    return man;
}
- (void)setBoyFriend:(NSString *)boyFriend{
    man = boyFriend;
}

属性boyFriend原本是对应于_boyFriend变量的,这里通过@synthesize改变了属性、getter、setter对应的变量。(这点很有用处,比如可以在子类修改父类中readonly属性的值。)

当然,如果不需要自定义实现setter、getter,那么只需要写一个@synthesize property = newName;

转载于:https://my.oschina.net/Jerod/blog/1935419

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值