我是目标C的新手,我只是希望得到关于何时使用指针的一般说明以及何时不使用,在声明实例变量时.
我能想到的例子是UIView vs. BOOL.UIView我会做一个指针,BOOL我不会(因为编译器对我大吼大叫).
任何一般指导都很棒.
干杯,
如果它是一个对象,则使用指针表示法.所有c类型(int,BOOL,long等)都不是对象,因此如果需要指向其内存位置的指针,则只使用指针:
NSObject *obj; UIView*obj; int integerVar; BOOL isTrue;
一个特例是id
,它本身就是一个指向对象的指针,所以你不需要*
:
id obj;
有点棘手:
NSInteger int; NSNumber *number;
NSInteger是适当的特定于平台的int类型,而NSNumber是一个可以包含int,float或者有什么的对象.
指针用于保存已分配内存的地址.在cocoa中创建对象时,您可以分配内存并将地址存储在指针中.
BOOL,char,int存储该值.
创建类时,alloc会分配内存,因此您需要存储指向该内存的指针才能访问它:
NSMutableArray * arr = [[NSMutableArray alloc] init];
如何从内存中清除C类型?
'简单'类型在堆栈上分配.调用方法时,在堆栈上分配空间以容纳所有方法变量(加上一些其他的东西,如参数和返回地址等).堆栈增长.一旦方法返回,堆栈就会收缩,并且方法使用的空间现在被回收 - 所以是的,简单类型将被"清理".
它实际上比听起来简单得多.查看维基百科堆栈条目 - 硬件堆栈以获取更多详细信息以满足您的好奇心.
当你'分配内存'时,内存在堆上分配.堆可用于整个应用程序的执行.在堆上分配内存后,您将获得该内存的地址 - 您将此地址存储在指针中.指针只是一个存储内存地址的变量.
当你的方法返回时,你不再能够访问在方法中声明的'简单'变量(例如BOOL,int,char等),但堆上的内存仍然存在.如果您仍然拥有内存的地址(例如指针),则可以访问它.
那么'simple'类型的实例变量怎么样(编辑:内部对象?)?
当你创建对象(我们在这里谈论目标C和Cocoa)并分配它时,你为整个对象分配空间.对象的大小是它所有变量的大小(不确定obj-c是否添加其他东西).因此,实例变量是堆上对象内存的一部分.当你释放/删除对象时,它的内存被回收,你不再能够访问存储在对象中的变量(在obj-c中你调用release,每个对象保持引用计数,当引用计数达到0时,对象被释放 - 堆上的内存被回收).