美文网首页
@dynamic和@synthesize

@dynamic和@synthesize

作者: Amor瑾年v | 来源:发表于2021-03-08 10:30 被阅读0次

1.@property有两个对应的词,一个是@synthesize,一个是@dynamic。如果@synthesize和@dynamic都没写,那么默认的就是@syntheszie var = _var;

2.@synthesize的语义是如果你没有手动实现setter方法和getter方法,那么编译器会自动为你加上这两个方法

3.@dynamic告诉编译器:属性的setter与getter方法由用户自己实现,不自动生成(当然对于readonly的属性只需提供getter即可)

假如一个属性被声明为@dynamic var,然后你没有提供@setter方法和@getter方法,编译的时候没问题,但是当程序运行到instance.var = someVar,由于缺setter方法会导致程序崩溃;或者当运行到 someVar = instance.var时,由于缺getter方法同样会导致崩溃。编译时没问题,运行时才执行相应的方法,这就是所谓的动态绑定

场景:
父类头文件

/**
 tableView,没有就生成,有就自动获取sb中的tableView
 */
@property (nonatomic) UITableView *tableView;

父类m文件

#pragma mark - getter 
- (UITableView *)tableView
{
    if (!_tableView) {

        _tableView =...
            tableView.tableFooterView = [UIView new];
           ...
    }
    return _tableView;
}

问题
这一行代码很坑

 tableView.tableFooterView = [UIView new];

很多场景下我们是需要这行代码的,但是少数情况下,是不需要的,如在SB中有个 footerView,在继承自父类的情况下,我们的tableFooterView就会被父类的这行代码覆盖。

解决方案:@dynamic
操作流程:
一、SB中托入tableView

@property (weak, nonatomic) IBOutlet UITableView *tableView;

二、载入dynamic

@implementation MyClassName
@dynamic tableView;

三、拷贝父类里的getter方法里对tableView进行的相关设置成一个方法在-viewDidLoad里调用即可。

- (void)viewDidLoad {
    [super viewDidLoad];

    [self setupTableView];
    ...
}

- (void)setupTableView {
          ....
// tableView.tableFooterView = [UIView new];
}

原文:https://www.jianshu.com/p/5df977e881e7?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

相关文章

  • @synthesize 和@dynamic的区别

    @synthesize 和@dynamic的区别 @synthesize 自动生成setter和getter方法,...

  • iOS @synthesize 和 @dynamic 区别

    1. @property中的 @synthesize 和 @dynamic 区别: @synthesize wil...

  • Object-c : @dynamic 与@synthesize

    1、 @dynamic与@synthesize作用 @dynamic 与@synthesize 是用于对@prop...

  • iOS基本面试题

    1、synthesize和dynamic有什么作用? synthesize:是系统自动生成getter和sette...

  • 面试题

    synthesize 和 dynamic区别 ? @synthesize 的语义是如果你没有手动实现 setter...

  • @dynamic和@synthsize

    一、使用上的区别 @synthesize和@dynamic是不能同时使用的。 @synthesize age = ...

  • @synthesize和@dynamic

    要彻底搞清楚这两个关键字需弄明白成员变量和成员属性的区别; 成员变量,OC1.0的时候我们为interface同时...

  • @synthesize和@dynamic

    @property有两个对应的词,一个是@synthesize,一个是@dynamic。如果@synthesize...

  • @dynamic 和 @synthesize

    1.@synthesize 该关键字没什么好说的,无非就是自动生成,而且现在都不用手动加,默认就是自动生成的 2....

  • @dynamic和@synthesize

    1.@property有两个对应的词,一个是@synthesize,一个是@dynamic。如果@synthesi...

网友评论

      本文标题:@dynamic和@synthesize

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