业界动态
一文看懂@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/ , 查看更多   
最新新闻
手机怎么做gif图(用手机怎么做gif图)
  《手机怎么做GIF图》  GIF图是一种动态图像格式,由于其支持动画效果,因此在社交媒体和网页设计中广泛应用。现在,随着智
手机捕鱼游戏(手机捕鱼游戏制作百家一起欢乐)
  《手机捕鱼游戏》:现代休闲的新宠  随着科技的飞速发展,智能手机已经渗透到我们生活的方方面面,其中就包括游戏娱乐。而
手机改qq密码(手机改qq密码怎么改的)
  关于《手机改QQ密码》的详细步骤与注意事项  在当今数字化时代,手机已成为我们日常生活中不可或缺的一部分。我们经常使用
手机字体大小设置在哪(手机字体大小设置在哪里?华为)
  关于《手机字体大小设置在哪》的文章  随着智能手机的普及,人们在使用手机的过程中,对于字体大小的需求也各不相同。有的
吃饭看手机的危害(吃饭看手机的危害有多大)
  《吃饭看手机的危害》  在当今社会,随着科技的快速发展,手机已经成为了我们日常生活中不可或缺的一部分。然而,在享受科
手机如何蹭网(手机如何蹭网无线上网)
  关于《手机如何蹭网》的文章——警惕违法犯罪风险  随着移动互联网的普及,无线网络已成为我们日常生活中不可或缺的一部分
华为手机股票(华为手机股票代码600733)
  华为手机股票:投资前景与市场动态  随着科技的飞速发展,智能手机行业在全球范围内持续繁荣,其中华为作为全球领先的智能
手机和微单(手机和微单拍照区别)
  文章标题:《手机与微单:摄影技术的革新与融合》  随着科技的飞速发展,摄影技术也在不断进步。手机与微单作为现代摄影技
red 手机(Red手机是钛合金还是钛钢)
  《Red手机》:科技与美学的完美结合  在当今科技日新月异的时代,智能手机已经成为我们生活中不可或缺的一部分。而在众多
手机内存小怎么办(手机内存小怎么办(黑科技))
  手机内存小怎么办  随着智能手机的普及,手机已经成为我们日常生活中不可或缺的一部分。但是,随之而来的问题是手机内存不