Obj-C:通过引用传递的替代方案

时间:2013-05-12 00:51:50

标签: objective-c design-patterns

所以,我在一个类中声明了2个变量,我们称之为model.h,在这个类中我初始化类CarRoad的实例。如果我希望Car知道 road还有哪些其他选项,而不是RoadCar的{​​{1}}引用Model,这种情况有用吗?

3 个答案:

答案 0 :(得分:1)

据我了解,将指针传递给指针并不是一个很好的设计模式,可以在整个应用程序中使用。它仅在Objective-c中保留,仅用于少数几个操作,即NSError。请参阅以下主题中的bbum的回复。

Arguments by reference in Objective-C

从它的接受和它的作者判断我会说这是非常好的建议,虽然也许不是“福音”。您当然可以将指针传递给指针,但这可能不是最好的方法。

另一种方法是考虑你正在考虑通过引用传递什么值(意味着指向指针),然后考虑方法/函数的设计,以便将这些值封装到一个类中。从你的方法/函数返回。

答案 1 :(得分:1)

在Objective-C中,对象总是通过引用传递,但您可以通过仔细设计类来缓解这些对象。

例如,NSStringNSNumber始终通过引用传递,但您可以将它们视为按值传递,因为它们是不可变的。您不能更改NSString(仅限NSMutableString)或NSNumber,因此无论您是通过价值还是通过参考传递都无关紧要。

同样,复制对象并使用-isEqual:进行比较以后可以模拟传值。 NSDictionary执行此操作 - -setObject:forKey:复制密钥并仅使用副本,而-objectForKey:使用-isEqual:-hash来比较密钥。

在您的情况下,如果道路的“地图”是固定的并且您不需要链接,那么您可能能够使Road个对象不可变(或者至少在加载后不会发生变异)道路回到汽车。如果你这样做,那么通过引用传递实际上是一个有用的优化,而不是等待发生的错误。

答案 2 :(得分:0)

真的没有其他选择。通过Objective-C中的指针访问对象始终。没有办法声明一个 对象的变量,你只能创建引用对象的变量。