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)
记忆管理明智吗?
那家伙说第一个是正确的,拒绝第二个.为什么第二个会出错?据我所知,两者都将自动释放的实例分配给某些属性,但不知怎的,仍有一个顽固的论点,即第二个错误.我看不到它,任何帮助都会如此受欢迎.
在这种情况下,计算保留和释放有帮助.这绝对是一个泄漏.您的locationManager对象将被保留2次:一次是通过alloc/init电话,一次是通过财产.将属性设置为nil仅释放locationManager一次.
对于编辑1中给出的示例,它们确实是相同的.这听起来像其他开发人员厌恶立即自动释放或不太明白是什么autorelease.
| 归档时间: |
|
| 查看次数: |
871 次 |
| 最近记录: |