2012-03-10 46 views
1

因此,标准规则是如果一个对象是使用alloc创建的,复制或保留,它需要一个后续版本。使用便捷方法创建的对象是自动发布的。 但是用“=”定义并用在方法范围中的临时变量呢?例如(iOS)临时变量的内存管理

NSError *error = nil; 
NSString *tempString = @"foo"; 
int number = otherInt * 32; 
NSUInteger row = [indexPath row]; 
NSArray *sameArrayDifferentPointer = otherArray; 

甚至

NSArray *sameArrayDifferentPointer = (*NSMutableArray) otherMutableArray; 

我知道最后一个是“坏”,但编译罚款,不抛出异常。

回答

1

error,numberrow不是对象(或指向对象的指针),所以它们不需要(并且实际上不能)被释放。 (number是int,row或者是一个无符号的int或无符号长,error是指向零。)

tempString将被自动释放,线路

NSString *tempString = @"foo"; 

等效
NSString *tempString = [NSString stringWithString:@"foo"]; 

第二种写法使得它更清晰。同样,您的阵列相当于调用[NSArray arrayWithArray:otherArray]

+0

第二种情况如何更好?将一个常量字符串分配给一个变量没有任何问题。 – Caleb 2012-03-10 03:51:41

+0

当然不是。而且你在这两个版本中都给一个变量分配一个常量字符串。更详细的更清楚发生了什么事情,这对澄清有帮助。但我认为第二个'通常更好'的说法可能太强大了 - 将会被编辑。 – 2012-03-10 03:54:30

+0

具有完美的感觉。对于Objective-C甚至C语言来说都很新颖,指针的概念仍然让我兴奋不已。谢谢。 – TijuanaKez 2012-03-10 03:57:58

2

But what about temp vars defined with "=" and used in the scope of a method?

同样的规则适用。那些值是alloccopy还是retain?我在您提供的示例中看不到一个alloccopyretain。因此,不需要release