对@property与@synthesize的理解

先说IOS5以前代码:

#import "parentModel.h"

@interface subModel : parentModel
{
   //声明一个实例变量
    NSString *strA;
}
//声明一个strA属性 声明属性strA的set get方法
@property(strong, nonatomic)NSString *strA;
@end

@implementation subModel
//指定属性strA与实例变量strA对应 实现属性strA的set get方法
@synthesize strA;

@end

IOS5以后的代码:

@interface subModel : parentModel
/*
声明一个strA属性 并生成一个_strA实例变量 声明属性strA的set get方法
并在.m文件中实现属性strA的set get方法 指定属性strA与实例变量_strA对应
不再需要关键字@synthesize了
*/
@property(strong, nonatomic)NSString *strA;
@end

如果加上以下代码

@implementation subModel
//生成一个实例变量strA 指定属性strA与实例变量strA对应 实现属性strA的set get方法
@synthesize strA;
@end

@implementation subModel
//指定属性strA与实例变量_strA对应 实现属性strA的set get方法
@synthesize strA = _strA;
@end

如果想要重写set get方法 实现懒加载

@interface subModel : parentModel
//生成实例变量_strA 声明一个strA属性 声明属性strA的set get方法
@property(strong, nonatomic)NSString *strA;
@end

@implementation subModel
//指定属性strA与实例变量_strA对应 实现属性strA的set get方法
@synthesize strA = _strA;

- (void)setStrA:(NSString *)strA
{
    //添加代码
    _strA = strA;
}

- (NSString *)getStrA
{
    //添加代码
    return _strA;
}
@end

写点总结的东西

#import "parentModel.h"

@interface subModel : parentModel
@property(strong, nonatomic)NSString *strA;//写法一
@end


@interface parentModel ()
@property(strong, nonatomic)NSString *strB;//写法二
@end

@implementation subModel
{
    //写法三
    NSString *strC;
}
@synthesize strD = _strD;//写法四
@end

写法一:声明属性,方便外部文件存取,重写set 或 get方法
写法二:声明属性,指向私有实例变量,用于重写set 或 get方法 实现懒加载
写法三:声明私有实例变量,方便类中调用
写法四:一般情况是不用写的,当需要同时重写set和get方法的时候就需要@synthesize 实现属性指向

你可能感兴趣的:(对@property与@synthesize的理解)