Ios5 “关于财产的澄清”;综合;,及;“动态”;在Objective-C2.0中
如果我在Objective-C2.0中定义一个属性,如下所示:Ios5 “关于财产的澄清”;综合;,及;“动态”;在Objective-C2.0中,ios5,dynamic,properties,synthesize,Ios5,Dynamic,Properties,Synthesize,如果我在Objective-C2.0中定义一个属性,如下所示: @property (readwrite, assign) NSObject *theObject; 我必须以某种方式创建getter和setter方法。据我所知,我有三种选择 手动编码对象的-(NSObject*)实现&-(void)设置对象:(NSObject*)对象 使用@synthesis自动生成这两种方法,或 使用@dynamic自动生成我不选择覆盖的两种方法中的任何一种 我理解正确吗?另外,不同的@属性参数的使用如
@property (readwrite, assign) NSObject *theObject;
我必须以某种方式创建getter和setter方法。据我所知,我有三种选择
- 手动编码对象的
&-(NSObject*)实现
-(void)设置对象:(NSObject*)对象
- 使用
自动生成这两种方法,或@synthesis
- 使用
自动生成我不选择覆盖的两种方法中的任何一种@dynamic
我理解正确吗?另外,不同的
@属性
参数的使用如何影响@synthesis
和@dynamic
的结果?(例如,非原子的
和弱的
)你误解了@synthesis
和@dynamic
之间的区别
如果尚未手动实现getter和/或setter,@synthesis
将生成属性的getter和setter方法。这就是您目前认为的@dynamic
所做的
@dynamic
在您不希望运行时自动生成getter和setter,并且尚未手动实现它们时使用。基本上,@dynamic
告诉编译器,getter/setter将在运行时使用某种运行时魔法动态提供
例如,报告说:
我建议您阅读《语言》一节,因为它更详细地解释了
@property
,,@synthesis
和@dynamic
与所有属性一起工作,如非原子的和弱的您误解了@synthesis
和@dynamic
之间的区别
如果尚未手动实现getter和/或setter,@synthesis
将生成属性的getter和setter方法。这就是您目前认为的@dynamic
所做的
@dynamic
在您不希望运行时自动生成getter和setter,并且尚未手动实现它们时使用。基本上,@dynamic
告诉编译器,getter/setter将在运行时使用某种运行时魔法动态提供
例如,报告说:
我建议您阅读《语言》一节,因为它更详细地解释了@property
,,@synthesis
和@dynamic
与所有属性一起工作,如非原子的
和弱的
告诉编译器访问器方法是在运行时提供的
经过一点调查,我发现提供访问器方法会覆盖@dynamic
指令
@synthesis
告诉编译器为您创建这些访问器(getter和setter)
@property
告诉编译器将创建访问器,并且可以使用点符号访问,或者[对象消息]
@dynamic
告诉编译器在运行时提供访问器方法
经过一点调查,我发现提供访问器方法会覆盖@dynamic
指令
@synthesis
告诉编译器为您创建这些访问器(getter和setter)
@property
告诉编译器将创建访问器,并且可以使用点符号或[对象消息]
访问访问器。然而,这是我最初的想法,这个错误消息讲述了另一个故事:可写原子属性对象不能将合成的getter与用户定义的setter配对。我认为这是因为,正如错误消息所说,它是一个原子属性。如果您定义自己的setter,Objective-C将无法保持其原子性保证。尝试使用非原子。这是我最初的想法,但是,此错误消息讲述了一个不同的故事:可写原子属性对象不能将合成的getter与用户定义的setter配对。
。我认为这是因为,正如错误消息所说,它是一个原子属性。如果您定义自己的setter,Objective-C将无法保持其原子性保证。试试非原子的。
You can implement the methods `resolveInstanceMethod:` and `resolveClassMethod:`
to dynamically provide an implementation for a given selector for an instance
and class method respectively.