在objective-c中何时使用指针

在objective-c中何时使用指针,objective-c,ios4,Objective C,Ios4,我正在学习如何创建iPhone应用程序,我看到我们创建的大多数变量都存储内存地址(指针),而不是保存实际的值或对象。我还发现,每次使用指针char(*)声明变量时,您都知道该变量将保存地址,并且每当您不使用(*)标记声明变量时,您都知道它将保存值而不是内存位置。但我不知道什么时候给我们哪个。例如,我有: CGFloat someVar = [image1 alpha]; // This variable does not require *

我正在学习如何创建iPhone应用程序,我看到我们创建的大多数变量都存储内存地址(指针),而不是保存实际的值或对象。我还发现,每次使用指针char(
*
)声明变量时,您都知道该变量将保存地址,并且每当您不使用(
*
)标记声明变量时,您都知道它将保存值而不是内存位置。但我不知道什么时候给我们哪个。例如,我有:

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 *

如果我能知道什么时候可以使用它们,而不是在项目编译之前尝试它们,那就太好了。

过于简单化了,但这取决于返回的数据

从您的示例中,
CGFloat
float
的包装器,它是一种基本的C数据类型<代码>[image1 alpha]返回一个
CGFloat
<代码>UIViewController是一种对象类型
[[UIViewController alloc]init]
返回指向此分配内存的指针,
(UIViewController*)
。因此,您需要使用指针


指针可用于比所描述的更多的情况。一般来说,在开始时,通常会使用对象指针。但我鼓励您确定确切的数据类型。它将提供关于特定方法或属性返回的数据类型的提示。

过于简单化,但这取决于返回的数据

从您的示例中,
CGFloat
float
的包装器,它是一种基本的C数据类型<代码>[image1 alpha]返回一个
CGFloat
<代码>UIViewController是一种对象类型
[[UIViewController alloc]init]
返回指向此分配内存的指针,
(UIViewController*)
。因此,您需要使用指针


指针可用于比所描述的更多的情况。一般来说,在开始时,通常会使用对象指针。但我鼓励您确定确切的数据类型。它将提供关于特定方法或属性返回的数据类型的提示。

标题和文档中的函数和方法签名将指示该类型

例如,下面是如何为
UIView
声明
alpha
属性:

@property(nonatomic) CGFloat alpha;
任何地方都没有
*
,因此您知道它返回
CGFloat
,而不是
CGFloat*

相反,
backgroundColor
属性声明如下:

@property(nonatomic, copy) UIColor *backgroundColor;
因此,您知道它将返回
UIColor*
(指针)

有些东西是用
id
类型声明的,它总是指向一个对象的指针


通常,Objective-C对象(使用
@interface
声明的类型)将始终作为指针引用,而原始C类型和
结构通常(但不总是)通过值传递和返回。

头和文档中的函数和方法签名将指示类型

例如,下面是如何为
UIView
声明
alpha
属性:

@property(nonatomic) CGFloat alpha;
任何地方都没有
*
,因此您知道它返回
CGFloat
,而不是
CGFloat*

相反,
backgroundColor
属性声明如下:

@property(nonatomic, copy) UIColor *backgroundColor;
因此,您知道它将返回
UIColor*
(指针)

有些东西是用
id
类型声明的,它总是指向一个对象的指针


通常,Objective-C对象(使用
@interface
声明的类型)将始终被引用为指针,而基本C类型和
结构通常(但不总是)通过值传递和返回。

您可以阅读文档。
UIViewController
的第一个谷歌结果是。返回类型为每个方法指明。您可以阅读文档。
UIViewController
的第一个谷歌结果是。每个方法都指示返回类型。