iPhone:这是不是泄漏

ahm*_*rah 5 iphone memory-leaks memory-management

最近有人在Stack Overflow上告诉我,下面的代码没有泄漏,该属性处理保留本身:

self.locationManager = [[CLLocationManager alloc] init];
Run Code Online (Sandbox Code Playgroud)

在dealloc中:

   self.locationManager = nil;
Run Code Online (Sandbox Code Playgroud)

在.h文件中的位置:

@property (nonatomic, retain) CLLocationManager *locationManager;
Run Code Online (Sandbox Code Playgroud)

我认为这是一个明显的泄漏,并认为这应该解决泄漏:

self.locationManager = [[[CLLocationManager alloc] init] autorelease];
Run Code Online (Sandbox Code Playgroud)

然而他声称这样做不会起作用,因为用他的话说:"你没有自动释放类的属性.定义为保留的属性的自动生成的访问器将自动处理保留"

他让我想知道他是错了还是我根本不了解记忆管理?

编辑1:是代码

self.myName=[NSSting stringWithFormat:@"%@ is correct.", @"TechZen"];
Run Code Online (Sandbox Code Playgroud)

任何不同的

 self.locationManager = [[[CLLocationManager alloc] init] autorelease];
Run Code Online (Sandbox Code Playgroud)

记忆管理明智吗?

那家伙说第一个是正确的,拒绝第二个.为什么第二个会出错?据我所知,两者都将自动释放的实例分配给某些属性,但不知怎的,仍有一个顽固的论点,即第二个错误.我看不到它,任何帮助都会如此受欢迎.

Col*_*son 7

在这种情况下,计算保留和释放有帮助.这绝对是一个泄漏.您的locationManager对象将被保留2次:一次是通过alloc/init电话,一次是通过财产.将属性设置为nil仅释放locationManager一次.

对于编辑1中给出的示例,它们确实是相同的.这听起来像其他开发人员厌恶立即自动释放或不太明白是什么autorelease.