@dynamic 和 @synthesize 有啥区别?

Posted

技术标签:

【中文标题】@dynamic 和 @synthesize 有啥区别?【英文标题】:What's are the differences between @dynamic and @synthesize?@dynamic 和 @synthesize 有什么区别? 【发布时间】:2011-01-05 04:33:12 【问题描述】:

从我正在阅读的文档中,@dynamic 在运行时创建访问器方法,而 @synthesize 将在构建时创建访问器。

所以让我猜猜:@dynamic 节省了一些内存并且代码在内存页面中保持更小?要不然是啥?以及它们之间还有哪些其他区别?

是否可以说:“使用@dynamic 而不是@synthesize 总是一个好主意”?我的意思是……如果这样真的可以节省内存,为什么不呢?

但我猜@dynamic 比@synthesize 有一些劣势,否则每个人都只会使用@dynamic。那么有什么缺点呢?

【问题讨论】:

【参考方案1】:

没有。动态属性不会自动生成。 @dynamic 属性标记向编译器表明 将以某种方式提供访问器和设置器:

来自Objective-C Programming Language Guide:

@dynamic

您使用 @dynamic 关键字告诉编译器您将通过直接提供方法实现或在运行时使用其他机制(例如动态加载代码或动态方法解析)来履行属性所隐含的 API 协定。

【讨论】:

【参考方案2】:

不,@dynamic 不会为您带来任何内存/代码大小优势

【讨论】:

【参考方案3】:

不,@dynamic 表示将在运行时提供实现。 @synthesize 告诉编译器为您创建实现。例如,您可以将@dynamic 与Core Data 一起使用,它会在运行时生成属性实现。如果您不使用其中任何一个,编译器会假定您将提供实现。

【讨论】:

以上是关于@dynamic 和 @synthesize 有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

@dynamic与@synthesize的差别

iOS中的@dynamic与@synthesize

@synthesize和@dynamic区别

@synthesize和@dynamic区别

@dynamic

@synthesize @dynamic 的区别