最近有人在堆栈溢出告诉我下面的代码不漏,该财产处理保留本身:iPhone:这是一个泄漏或不
self.locationManager = [[CLLocationManager alloc] init];
中的dealloc:
self.locationManager = nil;
在.h文件中:
@property (nonatomic, retain) CLLocationManager *locationManager;
我认为这是一个明显的泄漏,并认为这应该可以修复泄漏:
self.locationManager = [[[CLLocationManager alloc] init] autorelease];
但他声称不会工作,因为用他的话说:“你不会自动释放一个类的属性。一个属性的自动生成的访问定义为保留会自动处理保持”
,他让我怀疑他是错的还是我不明白,在所有的内存管理
编辑1:是的代码
self.myName=[NSSting stringWithFormat:@"%@ is correct.", @"TechZen"];
比
self.locationManager = [[[CLLocationManager alloc] init] autorelease];
内存管理明智的有什么不同?
这家伙说第一个是正确的,拒绝第二个。为什么第二个是错误的?据我可以看到,两个分配autoreleased实例的一些属性,但不知何故仍然存在一个固执的论点,第二个是错误的。我看不到它,任何帮助都会如此受欢迎。
在你的编辑1上,保留智慧,他们是一样的。这些对象都只保留一次。所有便利功能都有一个隐含的自动释放功能。如果你在init语句中没有看到alloc这个词,那么这个变量是自动释放的。如果你使用alloc,你应该使用autorelease – 2010-02-12 23:23:56