在Objective-C中简单地说 - 假设
我是否正确感谢任何有助于解决我的困惑的建议 iFloh
答案 0 :(得分:3)
1)所有指针变量必须是 他们没有被使用时被释放 更?
这取决于你“拥有”尖锐的东西。我建议您仔细阅读这些Memory Management规则,以了解如何释放指针。
2)每个指针变量(*)都是一个类 某种,不是吗?
不是每一个指针。指针变量可以保存指向对象或存储器块的指针。它只是指向某事物的指针。
3)因此每个指针变量都需要 使用分配和初始化 “alloc”和“init”(或类似的)?
不是每一个指针。指针变量可以保存指向对象或存储器块的指针。指向的东西可以是已经存在的对象或分配的内存块。
4)使用Object声明变量时 方法我可能不需要“alloc”或 “初始化”?
不是每次都是。您可能会获得指向现有对象的指针,而无需知道谁分配并初始化它。同样,还有一些所有权规则要遵循。我建议您仔细阅读这些Memory Management规则。
5)数字声明(BOOL,int,float, 等)不需要内存管理 只要他们没有被宣布为 指针?
是。有一种叫做原始类型,只要你把它们作为值来操作,你就不必处理它们的内存管理。
答案 1 :(得分:2)
所有指针变量在不再使用时必须释放?
仅当“指针变量”指向Objective-C类的实例时,并且仅当您导致先前保留该实例时。 Read this: Memory Management Guide
每个指针变量( **)都是某种类,不是吗?*
如果指针变量被声明为指向类实例的指针,那么它将指向类的实例。否则,它不会。指针就是这样;一个指针 - 一个引用 - 一块内存。那块内存可能是一个类,一个类的实例,一个C结构,或一个原始缓冲区(或其他东西)。
因此需要使用“alloc”和“init”(或类似的)分配和初始化每个指针变量?
仅当指针指向Objective-C类的实例时。如果它是C结构,您可以使用malloc()
。即使在Objective-C类的情况下,您可能不会alloc
任何事情:
NSString * foo = [NSString stringWithFormat:@“Hello,%@”,@“World!”]; NSString * bar = @“bar”; NSBundle * main = [NSBundle mainBundle];
(顺便说一句:以上都不需要-release
。)
使用Object方法声明变量时,我可能不需要“alloc”或“init”?
这个问题表明你应该阅读 - 并重新阅读(我在第一个十年中每隔18个月阅读一次,我写了Objective-C代码,每次都学习一些东西) - the Objective-C language guide。
您可能还应该阅读有关C语言本身的内容。这可能有助于您理解指针与其他类型。
数字声明(BOOL,int,float等)只要它们没有被声明为指针就不需要内存管理吗?
是的,但它比特定类型更简单。当你说int foo;
时,你告诉编译器在局部作用域中创建一些空间 - 通常是堆栈 - 来存储一个int的数据。当你说int *foo;
时,你告诉编译器在本地范围内划出一些空间来存储指针 - 存储地址 - 在一个包含int的内存中。
因此,NSArray *bar
只是指向实例的指针,是的,NSArray bar;
,如果未明确禁止,则会在堆栈上划出一大块空间来容纳NSArray实例。
当你有一个东西的指针时必须以某种方式初始化某些东西,这通常是通过分配完成的(但并非总是如此)。
答案 2 :(得分:0)
我相信你是对的:
是
我想。我不确定我理解这个问题。
有点:如你所说,如果你使用某些Class方法,则不一定是alloc
+ init
。因此,分配和初始化是隐式完成的。
正确。 (见上文)
我认为这不仅仅是数字,C基元不需要内存管理。
我建议您阅读memory management rules from Apple以及Stanford class on iPhone Programming。