有人可以澄清这里发生了什么。我有一个名为:brainModel 的类,它又有一个名为:operandStack 的 NSArray。我只是访问数组向它发送消息“removeAllObjects”

self.brainModel.operandStack.removeAllObjects;

但是使用点符号它给了我一个警告“未使用的属性访问结果 - 不应将 setter/getter 用于副作用”这究竟是什么意思?

使用这样的嵌套括号语法不会发出警告:
 [[[self brainModel]operandStack]removeAllObjects];

顺便说一句,两者都有效......它与错误使用点符号有什么关系吗?或者在这样的消息传递对象时使用点表示法是否被认为是一种好习惯 - 向它发送诸如“removeAllObjects”之类的参数。

最佳答案

removeAllObjects 不是属性;这是一种方法。

使用属性访问表示法很有效,因为属性通常是使用同名方法访问的。但是,预计获取属性的值不会更改包含该对象的对象(或进行任何其他更改),而 removeAllObjects 则不是这种情况。这些是编译器所指的“副作用”。

可能,您希望改为执行此调用:

[self.brainModel.operandStack removeAllObjects];

这将获取 brainModelself 属性,然后获取 operandStackself.brainModel 属性,然后在其上调用 removeAllObjects

10-08 05:54