2011-05-04 61 views
2

我是一個很長時間的C++程序員,在C#中有很長的時間。然而,我現在在Objective C中工作,而且我想知道,將消息發送到Objective C中的零對象是否有缺點?將消息發送到目標c中的零對象是否有缺點?

舉例來說,我很習慣這樣做:

MyClass* c = NULL; 
// ... 
if(c != NULL) c->MyMethod(); 

所以在目標C,我覺得自己做的:

MyClass* c = nil; 
// ... 
if(c != nil) [c MyMethod]; 

所以,我想知道是,是否有任何好處在檢查零?如果我嘗試發送消息給零,Objective C是否足夠聰明,不會做任何額外的奇怪處理?還是有一些隱藏的成本,使得值得繼續檢查零?

+0

只要注意您使用返回值的情況。 – 2011-05-04 03:03:41

回答

4

在Objective-C中,您不需要檢查零,消息傳遞無效有效是完全有效的,並且如果返回值是整數,大多數時間將返回零或0。如果傳遞的消息的返回值是float,double或struct,返回值是未定義的。

+1

消息'nil'也是高度優化的(正如在啓用GC時發送'-retain'或'-release'),所以它在大多數情況下甚至不是性能問題。 – alastair 2011-05-04 10:11:34

3

沒有。這就是Objective-C的美妙之處。

2

只要返回值在該上下文中意義完整,消息傳遞nil就沒有問題。在某些情況下,調試可能會變得複雜......

「如果該方法返回任何指針類型,則返回小於或等於sizeof(void *),float,double或long double的任何整數標量或(發送消息到零)。