业界动态
一文看懂@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/ , 查看更多   
最新新闻
传奇单机版手机(传奇单机版手机下载安装)
  《传奇单机版手机》:重温经典,掌中传奇  随着科技的飞速发展,手机游戏已成为我们生活中不可或缺的一部分。而在这其中,
手机mp3(手机mp3音频怎么剪辑)
  关于手机MP3的文章  随着科技的飞速发展,手机已经成为了我们日常生活中不可或缺的一部分。而手机中的众多功能之一,MP3音
cad手机看图(cAD手机看图纸)
  《CAD手机看图》:一款便捷高效的移动CAD看图工具  随着科技的快速发展,我们的生活越来越离不开移动设备。在这样的背景下
安卓手机代码大全(安卓手机代码大全下载)
  安卓手机代码大全:深度解析与应用指南  随着移动互联网的飞速发展,安卓操作系统已经成为全球最受欢迎的移动平台之一。对
oppo手机微信分身(oppo手机微信分身在哪里)
  OPPO手机微信分身功能详解  随着移动互联网的普及,微信已成为人们日常生活中不可或缺的社交工具。对于拥有多个微信账号的
手机微信机器人(手机版微信机器人)
  关于《手机微信机器人》的文章  随着科技的飞速发展,人工智能逐渐融入我们的日常生活,其中,手机微信机器人成为了一个引
手机为什么不能看视频(手机为什么不能看视频播放)
  关于《手机为什么不能看视频》的文章  随着移动互联网的普及,手机已经成为我们日常生活中不可或缺的一部分。人们使用手机
手机gpu天梯图(手机gpu天梯图极客湾)
  关于《手机GPU天梯图》的文章  随着移动设备的普及,智能手机已成为我们日常生活中不可或缺的一部分。而在手机性能中,GPU
手机选股(手机选股怎么设置)
  《手机选股》:科技引领投资新时代  随着科技的飞速发展,移动互联网已经渗透到我们生活的方方面面,其中也包括我们的投资
qq 手机标识(qq手机标识怎么改手机型号)
  关于《QQ手机标识》的文章  在当今数字化时代,智能手机已成为人们生活中不可或缺的一部分。而QQ手机标识,作为手机使用中