@dynamic和@synthesize之间的区别是什么?

时间:2010-01-14 17:40:14

标签: iphone objective-c cocoa cocoa-touch

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

所以让我猜一下:@dynamic会节省一些内存,代码会在内存页面中保持较小的数量吗?或者是什么?这些之间有什么其他差异?

可以说:“使用@dynamic而不是@synthesize总是一个好主意”?我的意思是......如果能节省真正的记忆,为什么不呢?

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

3 个答案:

答案 0 :(得分:21)

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

来自Objective-C Programming Language Guide

  

@dynamic

     

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

答案 1 :(得分:7)

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

答案 2 :(得分:2)

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