@dynamic跟@synthesize

@property有两个对应的词,一个是@synthesize,一个是@dynamic。如果@synthesize和@dynamic都没写,那么默认的就是@syntheszie var = _var;

@synthesize的语义是如果你没有手动实现setter方法和getter方法,那么编译器会自动为你加上这两个方法。

@dynamic告诉编译器,属性的setter与getter方法由用户自己实现,不自动生成。(当然对于readonly的属性只需提供getter即可)。假如一个属性被声明为@dynamic var,然后你没有提供@setter方法和@getter方法,编译的时候没问题,但是当程序运行到instance.var =someVar,由于缺setter方法会导致程序崩溃;或者当运行到 someVar = var时,由于缺getter方法同样会导致崩溃。编译时没问题,运行时才执行相应的方法,这就是所谓的动态绑定。

熟悉object-c语法的都知道@synthesize实际的意义就是 自动生成属性的setter和getter方法。

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 摘自: http://www.cocoachina.com/ios/20150803/12872.html 说明...
    program袁阅读 958评论 1 3
  • 嗨,好久不见。 是啊,好久不见。 我们微笑着聊着天, 到了分叉路口说了再见。 多少的一句好久不见后就是再也不见。 ...
    Yamnesia阅读 233评论 0 1
  • 媳妇呵斥我睡觉的时候已经是十二点以后了,老同学结婚前夜,按着习俗前一天晚上要“贺事情”。恰好我又是同学们眼里的老司...
    心甲阅读 341评论 3 1
  • 早年上学的时候我听过这样一个人,他叫陈二。听说他经常穿着工装裤,和一件纯白色的短袖,脚上踩着一双拖拉板走起路时喜欢...
    周霸爷阅读 1,415评论 0 3
  • 作为将近170的女汉子,夏天快来的时候一定要准备一双舒适无比的芭蕾舞鞋,为啥? 若是穿上高跟鞋,就仿佛行走的定海神...
    草莓小丫头阅读 11,944评论 0 4

友情链接更多精彩内容