1、 @dynamic与@synthesize作用
-
@dynamic 与@synthesize 是用于对@property属性的修饰,默认不设置@dynamic与@synthesize,则属性是@synthesize。
2、@dynamic与@synthesize干什么用?
-
@dynamic: 修饰的属性、其getter和setter方法编译器不会自动生成、必须需要自己实现。如果自己没有实现getter和setter方法、编译时没问题,运行时执行对应的方法(动态绑定)时会导致程序崩溃。
-
@synthesize: 修饰的属性、其getter和setter方法编译器会自动生成,不需要自己实现。且指定与属性相对应的成员变量。
3、示例
TestModel.h文件
#import <Foundation/Foundation.h>
NS_ASSUME_NONNULL_BEGIN
@interface TestModel : NSObject
@property (nonatomic,strong) NSString *frist;
@property (nonatomic,strong) NSString *second;
@end
NS_ASSUME_NONNULL_END
TestModel.m文件
#import "TestModel.h"
@interface TestModel(){
NSString *_frist; //使用@dynamic必需在此创建关联属性
}
@end
@implementation TestModel
@dynamic frist;
@synthesize second = _second;
- (instancetype)init
{
self = [super init];
if (self) {
}
return self;
}
- (void)setFrist:(NSString *)frist {
if (frist != _frist) {
_frist = frist;
}
NSLog(@"set: %@",frist);
}
- (NSString*)frist {
NSLog(@"get: %@",self.frist);
return _frist;
}
@end
实现
#import "ViewController.h"
#import "TestModel.h"
@interface ViewController ()
{
TestModel *firstModel;
}
@property (nonatomic,strong) TestModel *secondModel;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
firstModel = [[TestModel alloc]init];
_secondModel = [[TestModel alloc]init];
firstModel.frist = @"123";
_secondModel.frist = @"456";
firstModel.second = @"abc";
_secondModel.second = @"efg";
NSLog(@"1: %@ 2: %@",firstModel.second,_secondModel.second);
}
@end
网友评论