美文网首页
Object-c : @dynamic 与@synthesize

Object-c : @dynamic 与@synthesize

作者: leafu | 来源:发表于2018-10-22 10:46 被阅读17次

1、 @dynamic与@synthesize作用

  • @dynamic@synthesize 是用于对@property属性的修饰,默认不设置@dynamic@synthesize,则属性是@synthesize

2、@dynamic与@synthesize干什么用?

  • @dynamic: 修饰的属性、其gettersetter方法编译器不会自动生成、必须需要自己实现。如果自己没有实现gettersetter方法、编译时没问题,运行时执行对应的方法(动态绑定)时会导致程序崩溃。
  • @synthesize: 修饰的属性、其gettersetter方法编译器会自动生成,不需要自己实现。且指定与属性相对应的成员变量。

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

相关文章

网友评论

      本文标题:Object-c : @dynamic 与@synthesize

      本文链接:https://www.haomeiwen.com/subject/mhmwzftx.html