因此标准规则是如果使用alloc,copy或retain创建对象,则需要后续版本。使用便捷方法创建的对象是自动释放的。 但是用“=”定义并在方法范围内使用的临时变量呢?例如
NSError *error = nil;
NSString *tempString = @"foo";
int number = otherInt * 32;
NSUInteger row = [indexPath row];
NSArray *sameArrayDifferentPointer = otherArray;
甚至
NSArray *sameArrayDifferentPointer = (*NSMutableArray) otherMutableArray;
我知道最后一个是“坏”但编译得很好并且不会抛出异常。
答案 0 :(得分:2)
但是用“=”定义并在方法范围内使用的临时变量呢?
同样的规则适用。您有alloc
,copy
或retain
这些值吗?我在您提供的示例中没有看到单个alloc
,copy
或retain
。因此,不需要release
。
答案 1 :(得分:1)
error
,number
和row
不是对象(或指向对象的指针),因此不需要(实际上也不能)释放它们。 (number
是一个int,row
是unsigned int或unsigned long,error
是指向nil的指针。)
tempString
将自动释放 - 行
NSString *tempString = @"foo";
相当于
NSString *tempString = [NSString stringWithString:@"foo"];
以第二种方式编写它可以更清楚地了解正在发生的事情。同样,您的数组相当于调用[NSArray arrayWithArray:otherArray]
。