2010-01-14 232 views
8

从我正在阅读的文档中,@dynamic在运行时创建访问器方法,而@synthesize将在构建时创建访问器。@dynamic和@synthesize之间有什么区别?

那么让我猜测:@dynamic节省了一些内存,代码在内存页面中保持较小?或者是什么?这些之间还有什么其他区别?

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

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

回答

21

编号动态属性不会自动生成。 @dynamic属性标记指示给将提供访问和setter莫名其妙的编译器:

Objective-C Programming Language Guide

@dynamic

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

7

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

2

不,@dynamic不会给你任何内存/代码尺寸优势