2011-05-18 25 views
1

我正在學習如何創建iPhone應用程序,我已經看到,我們創建存儲內存地址(指針)的大部分變量,而不是保存實際值或對象。我也發現,每當你用指針char(*)聲明一個變量時,你就知道變量將持有地址,並且每當你不使用(*)標記聲明一個變量時,就知道它是變量將保存值而不是內存位置。但我不知道什麼時候給我們哪個。比如我有:何時使用指針在Objective-C

CGFloat someVar = [image1 alpha]; // This variable does not require * 
            // image 1 is a: IBOutlet UIImageView 

,並在此等情況下,我必須使用一個指針:

UIViewController *someOtherVar = [[UIViewController alloc] init]; // this type of var requires * 

這將是很好,如果我能知道我什麼時候可以使用的每個而不是試圖每個直到項目編譯。

+0

您可以閱讀文檔。 「UIViewController」的第一個Google結果是[UIViewController類的引用](http://developer.apple.com/library/ios/#DOCUMENTATION/UIKit/Reference/UIViewController_Class/Reference/Reference.html)。返回類型針對每種方法指示。 – zneak 2011-05-18 16:02:08

回答

3

標題和文檔中的函數和方法簽名將指示類型是什麼。

例如,這裏是alpha屬性如何申報UIView

@property(nonatomic) CGFloat alpha; 

沒有*的任何地方,讓你知道它返回CGFloat,而不是CGFloat*

相比之下,backgroundColor屬性聲明如下:

@property(nonatomic, copy) UIColor *backgroundColor; 

,所以你知道它會返回UIColor*(指針)。

有些東西是用id類型聲明的,它總是一個指向對象的指針。通常,Objective-C對象(用@interface聲明的類型)將始終作爲指針引用,而原始C類型和structs將經常(但不總是)按值傳遞並返回。

1

過度簡化,但取決於要返回的數據。

從您的示例中,CGFloatfloat的包裝,這是原始數據類型[image1 alpha]返回CGFloatUIViewController是一個對象類型。 [[UIViewController alloc] init]返回一個指向此分配內存的指針(UIViewController *)。因此你需要使用指針。

指針可以用於比可以描述的更多的情況。一般來說,當你開始時,你通常使用指針來表示對象。但我鼓勵你到check the documentation來確定確切的數據類型。它將提供提示關於由特定方法或屬性返回的數據類型。