(iOS)临时变量的内存管理

时间:2012-03-10 03:38:03

标签: objective-c memory-management

因此标准规则是如果使用alloc,copy或retain创建对象,则需要后续版本。使用便捷方法创建的对象是自动释放的。 但是用“=”定义并在方法范围内使用的临时变量呢?例如

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

甚至

NSArray *sameArrayDifferentPointer = (*NSMutableArray) otherMutableArray;

我知道最后一个是“坏”但编译得很好并且不会抛出异常。

2 个答案:

答案 0 :(得分:2)

  

但是用“=”定义并在方法范围内使用的临时变量呢?

同样的规则适用。您有alloccopyretain这些值吗?我在您提供的示例中没有看到单个alloccopyretain。因此,不需要release

答案 1 :(得分:1)

errornumberrow不是对象(或指向对象的指针),因此不需要(实际上也不能)释放它们。 (number是一个int,row是unsigned int或unsigned long,error是指向nil的指针。)

tempString将自动释放 - 行

NSString *tempString = @"foo";

相当于

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

以第二种方式编写它可以更清楚地了解正在发生的事情。同样,您的数组相当于调用[NSArray arrayWithArray:otherArray]