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

ope*_*rog 8 iphone cocoa cocoa-touch objective-c

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

那么让我猜一下:@dynamic会节省一些内存并且代码在内存页面中保持较小?或者是什么?这些之间有什么其他差异?

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

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

not*_*oop 21

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

来自Objective-C编程语言指南:

@dynamic

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


Ale*_*lex 7

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