【发布时间】:2011-05-23 21:25:21
【问题描述】:
在NSData 的initWithContentsOfURL: 的documentation 中,它说:
返回的对象可能与原始接收者不同。
这意味着什么?这似乎暗示标准的“alloc/init”行可能会泄漏内存。
【问题讨论】:
标签: objective-c memory-leaks memory-management nsdata foundation
在NSData 的initWithContentsOfURL: 的documentation 中,它说:
返回的对象可能与原始接收者不同。
这意味着什么?这似乎暗示标准的“alloc/init”行可能会泄漏内存。
【问题讨论】:
标签: objective-c memory-leaks memory-management nsdata foundation
有几个原因 - 类集群是最广为人知的:
- (id)initWithContentsOfURL:(NSURL *)url
{
self = [super init];
if (self != nil) {
NSData * result =
[[NSDataClassClusterSpecialization alloc] initWithContentsOfURL:url];
[self release];
return result;
}
return self;
}
使用此表单不会引入任何泄漏。
这只是意味着您应该只使用alloc+init 调用的结果(而不是保留alloc 的结果),这在任何情况下都是一个好主意——即使没有明确说明记录在案。
【讨论】: