业界动态
一文看懂@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/ , 查看更多   
最新新闻
刘强东要求京东外卖利润不高于5%
IT之家4月15日消息,据新浪科技报道,近日京东创始人、董事会主席刘强东一段2024年(去年)内部讲话流出,其中显示刘强东声称“
特朗普又发疯了!前脚免了电子产品关税,后脚又说“没人能逃脱”
特朗普又发疯了!刚点完外卖,刷到这条消息,差点没把手里的奶茶喷出来。前脚刚宣布免关税,后脚立马转身来一句“没人能逃脱”,
关税战大反转,三大盟友集体“反水”,美国财长:这不是闹着玩的
当特朗普在社交媒体上疯狂刷屏俄乌战争时,一场关乎全球经济格局的博弈正在悄然改写剧本。13天的关税战,让美国的“纸老虎”真面
"玻璃大王"换人!曹德旺竟被福建同乡击败,他的名字鲜有人知
每当提及到中国玻璃的时候,我们想到最多的应该就是曹德旺了。毕竟在他的头顶拥有着众多的光环。不论是“玻璃大王”还是“中国首
曹德旺:当我悟透这6件事,父亲已经不在人世
曹德旺,大名鼎鼎的福耀集团董事长。然而,他自小却十分贫寒。“德旺”这个名字,是他伯父给取的,寓意是:“聪明又有德,必然兴
国内首饰金价格逼近1克700元,分析称金价长期易涨难跌
钛媒体App 3月30日消息,本周,国际金价四连涨,连创历史新高,国内黄金零售市场价格也“水涨船高”。今天,国内多家品牌金店的
《浪姐6》最爽名场面曝光: 62岁叶童怼房琪! 无论是情商人品还是业务能力, 叶童都赢麻了!
事后,房琪被网友指“低情商”,掉粉无数。事件发酵后,叶童在微博发表了下面这个回应,足见她的胸襟和坦率:镜头前银发飞扬的她
闪电评论|高校课堂禁用电子产品?应寻求“禁入”与“进入”的平衡点
近日,曲阜师范大学管理学院发布通知,要求学生在课堂上不得以任何理由使用手机、电脑等电子产品一事引发争议,支持者认为绝大多
高增长下,东鹏饮料难留股东“出走的决心”?
2022年11月以来,东鹏饮料包括董监高在内的重要股东合计减持公司约2780.35万股,减持金额超50亿元投资时间网、标点财经研究员 董
原创张国荣夸她是天才,与初恋相知相爱41年,丈夫出轨8次却依然原谅
“叶童真的好奇怪,你怎样看她都不是一个非常非常漂亮的女人,但是你怎么样看她都是一个非常非常漂亮的女人。” 阅女无数的倪匡