1

我遇到内存泄漏,任何人都可以在函数stringWithCString中找到内存泄漏吗?stringWithCstring

SomeView *detailViewController = [[SomeView alloc] initWithNibName:@"SomeView" bundle:nil];
detailViewController.test = [NSString stringWithCString:"abc" encoding:UTF8_ENCODING];

SomeView 中测试变量的属性是

@property (nonatomic,copy) NSString* test;

我的财产申报正确吗?

4

2 回答 2

1

您是否像这样在方法中释放字符串[SomeView dealloc]

- (void)dealloc
{
    self.test = nil;
    [super dealloc];
}
于 2012-07-14T10:11:51.343 回答
0

无论您使用什么来“检测”泄漏,它的可靠性如何?

现在我从来没有使用过属性,但上面的代码看起来很正确——字符串应该被释放。"stringWithCString:" 无论如何都会自动释放字符串,所以没有问题。但是,您的属性中的“副本”似乎表明它会复制字符串(嗯?惊喜!),即使我假设在拥有对象死亡时释放对象类型属性 - 如果拥有对象永远不会死,那么复制的字符串将永远不会被释放。

也许内存泄漏检测器真的意味着该字符串的副本永远不会被释放,因为您忘记释放“detailViewController”?该副本仍将位于同一源代码行中,因此即使内存泄漏检测器可以提供准确的位置但仅提供行号,您也可能会被误导......

于 2012-07-14T09:57:01.767 回答