所以我有一个用属性定义的类 - 为了这个例子,我们将它称为propertyName
。我在实现中使用@synthesize
设置了属性。
我有一个名为objectToNSDictionary
的方法,它基本上将该属性转储到字典中:
NSDictionary *dict = [[NSDictionary alloc] initWithObjectsAndKeys:
[self propertyName], @"propertyName", nil];
我将该dict返回给调用者我使用JSonWriter将其转换为字符串并将其传递给某个服务...
只需说上述内容即可。但是,我原来的实现没有使用[self propertyName]
,而只使用了propertyName
。当我这样做时,当我尝试在调用者中使用该对象时,我总是遇到错误unrecognized selector sent to instance
。
语法真正说的有什么不同,为什么一个有效而另一个无效?
答案 0 :(得分:2)
当您使用[self propertyName]
时,您将通过合成的getter方法引用您为类定义的属性。当您直接使用propertyName
时,您将绕过该属性并直接使用类ivar。只要您的ivar 确实 名为 propertyName ,这将有效,这不是必需的,可能不是这种情况。通常,直接访问你的ivar是一个坏主意,因为这样做会绕过编译器为你生成的内存管理脚手架。
您需要发布来自您的调用类的相关代码,以便能够告诉您为什么会收到“未被识别的选择器”消息。