2012-06-09 33 views
3

在Objective C中不使用指针表示可能类型的最佳方式是什么? 我不能简单地使用一个指向一个对象的指针,因为指向一个对象的指针不是一个对象,我需要它作为一个对象。在Objective C中不使用指针表示可能类型的最佳方式(指针指针不是对象?)

我知道这样做的一种方法是为每个对象拥有一个自定义类,这会导致像MaybeEmployee,MaybeOrderStatus和更多自定义类的类。这会起作用,但它看起来很烂,并不是一个很好的解决方案。

做到这一点的第二种方法,只需一个Maybe类似乎也是错误的。类型安全性的缺乏显然是不好的。

+0

创建界面和'respondsToSelector'调用是不够的? –

+0

您可以直接使用该对象并获得该类。请参阅:http://stackoverflow.com/questions/2055940/how-to-get-class-name-of-object-in-objective-c – hotpaw2

+0

@MarekSebera我不明白你的意思是什么意见,你可以吗?进入更多细节? –

回答

0

我不确定“可能类型”对您意味着什么,但是有没有一个原因为什么id是不够的?

+1

A也许类型是一个参数多态类型,对于某些类型,a是一个没有值,(不是空值),或者只是一个值。没有什么不同于null的关键原因是可以创建setToNothing方法,setToNull方法没有意义。 –

1

lef2有正确的想法。使用NSNull来表示“可能不是”的情况。

处理它的最简单方法是让你的方法返回一个id类型的对象,但正如你所说的那样,这会牺牲类型安全性。

我建议创建一个祖先类MaybeClass,并让所有的类从中派生出来。然后你可以创建一个特定的子类MaybeNot那真的是一个NSNull。

请注意,您也可以使用标准对象,并在方法调用的结果为空时返回nil。 Objective C比许多其他语言更清晰地处理零对象指针。将消息发送给无对象是完全有效的。他们只是掉线。

+0

使用'nil'不是一个有用的替代品,但'MaybeClass'听起来很有希望。 – Gabe

0

我也不确定你的意思是“可能类型”!一个协议可以成为你想要的一些类实现协议,而其他协议不是。他们可以检查对象是否实现它[yourObject conformsToProtocol:@protocol(yourProtocol)]。我希望这会有所帮助,但如果不是更多的澄清将是好事。