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