Ios5 “关于财产的澄清”;综合;,及;“动态”;在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自动生成我不选择覆盖的两种方法中的任何一种 我理解正确吗?另外,不同的@属性参数的使用如

如果我在Objective-C2.0中定义一个属性,如下所示:

@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.