业界动态
一文看懂@dynamic 与 @synthesize 关键词
2024-11-03 06:13

@dynamic 使用后而且没有自己实现

一文看懂@dynamic 与 @synthesize 关键词


@dynamic 就是要来告诉编译器,代码中用@dynamic修饰的属性,其getter和setter方法会在程序运行的时候或者用其他方式动态绑定,以便让编译器通过编译。其主要的作用就是用在NSManageObject对象的属性声明上,由于此类对象的属性一般是从Core Data的属性中生成的,Core Data框架会在程序运行的时候为此类属性生成getter和Setter方法。

1.@synthesize 该关键字没什么好说的,无非就是自动生成,而且现在都不用手动加,默认就是自动生成的
2.@dynamic 该关键字就是告诉编译器,该属性不需要系统帮忙自动生成关键来了,当你一个继承NSObject的对象,弄了一个属性,显然父类是没有一样的属性的,这种情形下,你需要手动生成getter和setter,如果没有生成,编译阶段没问题,而你访问的时候就会找不到方法而崩溃。
还有一种情形就是父类有个属性,已经默认自动生成了,而子类也声明了同样的属性,你如果也默认,不做其他操作,这种情形下,子类的属性就会出现警告,由于属性是继承来的,默认是在父类实现getter和setter,子类警告不会在子类出现getter和setter,会去其父类查找,那么你子类声明,也就是告诉他我会手动生成或者我父类有,你别警告我了,你运行起来就能找到了,自然,警告消除,运行起来调用就会去调用父类的getter和setter,能找到,就不会崩溃


## 详细介绍 关键词的场景,之前@dynamic只在NSManagedObject的子类中遇到过,因为NSManagedObject的子类是由CoreData直接生成的,其中对应参数(@property)的setter和getter方法也是由CoreData直接生成,并且不展现给你
## getter && setter 首先介绍一下什么是setter和getter方法

由名字也大致能猜出
getter方法是当你的程序某处读取一个参数A的时候,会调用的方法,它会返回当前A的值

setter方法是当你的程序某处给参数A赋值的时候,会调用的方法,把新值赋值给变量A

接下来,我们看一个非常老的标准的setter && getter方法

synthesize中文意思为‘合成’,在编译的过程中,编译器会帮你自动生成getter和setter方法,也就是说,上述代码中,把

两个函数的实现删除掉也是没有关系的。因为@synthesize语法糖会让编译器帮助你生成getter和setter方法
以上都是老的写法,但是现在看来基本上都是自动默认的,即使你不写@synthesize,它同样会自动帮你生成getter和setter方法


于是就到了今天主要要讲的关键词。之前也说到了,这个关键词用的不多,最常见的地方还是在CoreData的中会看见。


A相当于告诉编译器:“参数A的getter和setter方法并不在此处,而在其他地方实现了或者生成了,当你程序运行的时候你就知道了,所以别警告我了,如下警告示例”这样程序在运行的时候,对应参数的getter和setter方法就会在其他地方去寻找,比如父类

Auto property synthesis will not synthesize property ‘viewModel’; it will be implemented by its superclass, use @dynamic to acknowledge intention


父类 ```oc @interface father() @property (nonatomic, strong, readwrite) NSObject *sampleObject; ... @synthesize sampleObject = _sampleObject; @end ```

子类

这样的话,如果你在子类中调用sampleObject,则会调用父类的getter方法。

比如类遵守一个delegate时,delegate中的参数在父类的初始化方法中就赋值了,而子类的没有自己的初始化方法的时候,子类中的此参数就可以设为@dynamic,即和父类共用一个参数

基类控制器.h和.m部分代码


子类.h,.m文件部分代码 ```oc @interface MKJMainViewController : MKJbaseViewController @property (nonatomic,strong,readonly) MKJMainViewModel *viewModel; @end

@interface MKJMainViewController ()

@end

    以上就是本篇文章【一文看懂@dynamic 与 @synthesize 关键词】的全部内容了,欢迎阅览 ! 文章地址:http://sicmodule.glev.cn/news/8973.html 
     资讯      企业新闻      行情      企业黄页      同类资讯      首页      网站地图      返回首页 歌乐夫资讯移动站 http://sicmodule.glev.cn/mobile/ , 查看更多   
最新新闻
京东改手机号(京东改手机号码)
  关于《京东改手机号》的指南  随着互联网的普及和电子商务的飞速发展,京东作为中国最大的电商平台之一,吸引了众多用户的
手机唤醒功能(手机唤醒功能在哪)
  文章标题:《手机唤醒功能:科技之光唤醒生活的便捷性》  随着科技的飞速发展,智能手机已经成为了我们日常生活中不可或缺
手机用什么p图软件(手机用什么p图软件不压缩)
  手机用什么P图软件?全面解析当下最热门的移动修图工具  随着智能手机的普及,人们对照片的美观度要求越来越高。因此,各
手机架怎么折(手机架怎么折视频教程)
  标题:《手把手教你折出实用的手机架》  在当今时代,手机已成为我们日常生活中不可或缺的伴侣。随着手机的普及,手机架也
手机内存空间不足怎么清理(手机内存空间不足,建议清理)
  关于《手机内存空间不足怎么清理》的文章  随着智能手机的普及,我们的手机中存储的信息越来越多,无论是工作文件、照片、
手机场景图(手机场景服务在哪里)
  关于《手机场景图》的文章  随着智能手机的普及,我们的生活越来越离不开手机。在日常生活中,我们会用手机拍摄各种场景,
手机没电了打电话提示什么(手机没电了打过去会提示什么)
  文章标题:《手机没电了打电话提示什么》  在这个科技日新月异的时代,手机已成为我们日常生活中不可或缺的一部分。然而,
手机没充满电拔了对手机有坏处吗(手机充电中途拔掉会影响手机吗)
  关于《手机没充满电拔了对手机有坏处吗》的探讨  随着科技的飞速发展,智能手机已成为我们日常生活中不可或缺的伙伴。与此
华为手机图案解锁(华为手机图案解锁设置不见了)
  华为手机图案解锁:一种直观且便捷的安全方式  随着科技的进步和智能手机的普及,手机安全成为人们日益关心的问题。在众多
天马手机屏幕(天马手机屏幕寿命)
  天马手机屏幕:技术与艺术的完美结合  在当今智能手机市场,天马手机屏幕以其卓越的品质和技术创新赢得了广大消费者的青睐