帮助我理解原因:[self propertyName]有效,而propertyName没有

时间:2011-08-25 17:17:22

标签: objective-c cocoa

所以我有一个用属性定义的类 - 为了这个例子,我们将它称为propertyName。我在实现中使用@synthesize设置了属性。

我有一个名为objectToNSDictionary的方法,它基本上将该属性转储到字典中:

NSDictionary *dict = [[NSDictionary alloc] initWithObjectsAndKeys:
                      [self propertyName], @"propertyName", nil];

我将该dict返回给调用者我使用JSonWriter将其转换为字符串并将其传递给某个服务...

只需说上述内容即可。但是,我原来的实现没有使用[self propertyName],而只使用了propertyName。当我这样做时,当我尝试在调用者中使用该对象时,我总是遇到错误unrecognized selector sent to instance

语法真正说的有什么不同,为什么一个有效而另一个无效?

1 个答案:

答案 0 :(得分:2)

当您使用[self propertyName]时,您将通过合成的getter方法引用您为类定义的属性。当您直接使用propertyName时,您将绕过该属性并直接使用类ivar。只要您的ivar 确实 名为 propertyName ,这将有效,这不是必需的,可能不是这种情况。通常,直接访问你的ivar是一个坏主意,因为这样做会绕过编译器为你生成的内存管理脚手架。

您需要发布来自您的调用类的相关代码,以便能够告诉您为什么会收到“未被识别的选择器”消息。