业界动态
一文看懂@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/ , 查看更多   
最新新闻
AI助手入驻APP 手机应用变好用了吗?
AI自然语言大模型(LLM)在全球卷出天际时,移动互联网时代超车的中国“大厂”们则快速将LLM的能力植入到端应用场景中,手机APP
有什么软件可以免费写作?推荐5个AI写作生成器
写作成为了一项不可或缺的技能。并非每个人都有时间和精力进行写作。幸运的是,近年来人工智能技术的发展,为我们提供了一些极具
2024年京东自营入驻条件及费用有哪些?
2019年06月12日田蓬勃300万人民币京东自营及pop入驻,京东入驻,京东国际入驻,pop入驻计算机软件、教育软件的技术服务、技术咨询
旅游时除父母老婆孩子谁也别带,尤其是兄弟妯娌,除非你们想绝交
旅游时除父母老婆孩子谁也别带,尤其是兄弟妯娌,除非你们想绝交和大家分享我的这个经历吧。 前年夏天,我们打算去江南公路旅行
免费AI在线写作工具—提高写作效率的免费AI助手
随着科技的不断发展,人工智能(AI)正逐渐渗透到我们日常生活的方方面面,其中之一就是在线写作。免费AI在线写作工具如今已成为
上海中小幼学生开学:“用DeepSeek赶作业”受关注,他们怎么看?
上海市虹口区体育幼儿园开学迎新。校方 供图2月17日,上海约225万名中小学生和幼儿迎来了春季新学期第一天。为了迎接新年后的首
AI写作助手:永久免费全功能版,满足各种写作需求
AI写作助手:永久免费全功能版,满足各种写作需求在这个信息爆炸的时代,写作已成为多人日常生活和工作的必不可少组成部分。面对
《哪吒2》票房破98亿,非科班出身的导演引发热议
这个春节档,让全世界的人都认识了一个有着黑眼圈的哪吒。截止到现在,《哪吒之魔童闹海》票房已经超过了97亿,全民都在见证破百
奶茶妹妹章泽天狂删微博的背后也许并非心大,苦不苦唯有心知道!
继刘强东免于被起诉向奶茶妹妹道歉之后,当当李国庆为其“开解”的论调被炮轰的硝烟还未散尽,奶茶妹妹章泽天今天就登上了热搜榜
岩山科技:公司今年的研发费用主要用于人工智能领域的研发
(002195.SZ)12月18日在投资者互动平台表示, 公司今年的研发费用主要用于人工智能领域的研发,将为公司未来在人工智能领域所布