Objective c 重用变量的最佳实践?

Objective c 重用变量的最佳实践?,objective-c,memory-management,Objective C,Memory Management,我试图理解一点,我知道在这种情况下,它可能是微不足道的 当我打电话时,让我们说: float w = object.frame.size.width; 程序是否在每次我调用它时“计算”,或者是否在创建对象时存储这些数据 我的意思是,在内存使用方面,以下两者之间有什么区别: float w = object.frame.size.width; float g = object.frame.size.width; float s = object.frame.size.width; 以及: 谢谢

我试图理解一点,我知道在这种情况下,它可能是微不足道的

当我打电话时,让我们说:

float w = object.frame.size.width;
程序是否在每次我调用它时“计算”,或者是否在创建对象时存储这些数据

我的意思是,在内存使用方面,以下两者之间有什么区别:

float w = object.frame.size.width;
float g = object.frame.size.width;
float s = object.frame.size.width;
以及:

谢谢


Shani

object.frame.size.width
可能(在本例中也是如此)只读取并返回一些c结构属性,但请记住这些可能是真正的objective-c方法调用,例如
object.color

让我们用另一个不太明显的例子。您可以对每个对象调用
object.description
,以获取该对象的字符串描述。这显然与方法调用[对象描述]相同。你知道要得到描述需要做什么吗?这取决于该方法的实现者,但没有什么能阻止他们做一些昂贵的、建设性的或其他愚蠢的事情

object.doSomethingVeryComplexed
将起作用。这不是你应该如何使用点符号,你不应该在你的getter和setter中做一些非常复杂的事情,他们也不应该对你的对象做任何事情(除了懒洋洋地初始化它),但是没有硬的障碍来阻止你做这类事情。这是“唯一”的惯例。从理论上讲,你甚至可以做
object.tellmeyourcolor,然后用一个wrandomcolor
激活你自己。第一个例子显然有三个不同的答案,第二个例子只有一个答案

由getter和setter方法(这是唯一应该通过点表示法调用的方法)的实现者来确保这种轻浮不会发生,但是没有什么可以阻止方法的调用者调用destructve方法,这些方法不是通过点表示法使用的。点表示法是一种工具,供编写者向代码读者(包括您自己)指示简单的get/set操作


因此,我认为编译器无法将示例1优化/抽象为示例2。但我不确定,也许它真的对代码进行了如此深入的分析,以至于它知道什么时候可能,什么时候不可能。或者,在您的示例中,当它实际上只是一个对c结构的访问时,这是可能的,但当它是一个真正的方法调用时就不可能了。在任何情况下,你总是知道它是哪一个,以及它的含义是什么?我希望代码清晰而不是简洁。

object.frame
可能是
[object frame]
的快捷方式,它不仅是“访问C结构”,而且是“返回C结构的Objective-C方法”。@statute,这就是我想说的:您永远不能确定,应该像对待普通的objective-c方法调用一样对待点表示法。不过,在尝试使用
[object frame]
时,Xcode确实给了我一个警告。
float newVar = object.frame.size.width;
float w = newVar;
float g = newVar;
float s = newVar;