【发布时间】:2011-01-16 04:56:09
【问题描述】:
最近 Stack Overflow 上有人告诉我,下面的代码不会泄漏,属性会自行处理保留:
self.locationManager = [[CLLocationManager alloc] init];
在dealloc中:
self.locationManager = nil;
.h 文件的位置:
@property (nonatomic, retain) CLLocationManager *locationManager;
我认为这是一个明显的泄漏,并认为这应该可以解决泄漏:
self.locationManager = [[[CLLocationManager alloc] init] autorelease];
但是他声称这行不通,因为用他的话来说:“您不会自动释放类的属性。定义为保留的属性的自动生成访问器将自动处理保留”
他让我怀疑他是错的还是我根本不了解内存管理?
EDIT 1:是代码
self.myName=[NSSting stringWithFormat:@"%@ is correct.", @"TechZen"];
任何不同于
self.locationManager = [[[CLLocationManager alloc] init] autorelease];
内存管理方面?
那家伙说第一个是正确的,拒绝了第二个。为什么第二个会如此错误?据我所见,两者都将自动释放的实例分配给某些属性,但不知何故,仍然有一个顽固的论点认为第二个是错误的。我看不到它,任何帮助都会非常受欢迎。
【问题讨论】:
-
在您的 EDIT 1 中,保留计数明智,它们是相同的。这些对象都只保留一次。在所有便利功能中都有一个隐式的自动释放。如果您在 init 语句中没有看到 alloc 一词,则该变量是自动释放的。如果你使用alloc,你应该使用autorelease
标签: iphone memory-management memory-leaks