Objective-C:不应将getters用于副作用编译器警告

Tom*_*eit 4 methods objective-c notation nsarray

有人可以澄清这里发生的事情.我得到了一个名为:brainModel的类,它又有一个名为:operandStack的NSArray.我只是访问数组发送消息"removeAllObjects"

self.brainModel.operandStack.removeAllObjects;
Run Code Online (Sandbox Code Playgroud)

但是使用点符号它会给我一个警告"未使用属性访问结果 - 不应该使用getter来产生副作用"这究竟是什么意思?

使用这样的嵌套括号语法不会发出警告:

 [[[self brainModel]operandStack]removeAllObjects];
Run Code Online (Sandbox Code Playgroud)

这两个工作顺便说一句......它是否与错误使用点符号有关?或者在传递像这样的消息对象时使用点表示法被认为是一种好习惯 - 发送像"removeAllObjects"这样的参数.

mrb*_*mrb 5

removeAllObjects不是财产; 这是一种方法.

使用属性访问表示法是有效的,因为通常使用相同名称的方法访问属性.但是,预计获取属性的值不会更改包含对象的对象(或进行任何其他更改),但情况并非如此removeAllObjects.这些是编译器所指的"副作用".

或许,您可能希望执行此调用:

[self.brainModel.operandStack removeAllObjects];
Run Code Online (Sandbox Code Playgroud)

这得到brainModel属性self,然后operandStack属性self.brainModel,然后调用removeAllObjects它.