【发布时间】:2023-03-31 02:10:01
【问题描述】:
每当我读到如何避免内存泄漏时,我总会遇到一个概念: "分配的数量必须等于释放的数量"。
但我遇到了一个概念,我们需要多个版本。比如我以前的做法是这样的:
(NSString*) func1
{
NSString* result = [[NSString alloc] initWithFormat:@"Test String"]];
return result;
}
(void) func2
{
NSString* temp = [self func1];
[temp release];
}
但是我遇到了一个保留计数的概念,它表示在上述情况下,不会为字符串释放内存,因为字符串的保留计数最后为 1。所以正确的做法是
(NSString*) func1
{
NSString* result = [[NSString alloc] initWithFormat:@"Test String"]];
[result autorelease];
return result;
}
(void) func2
{
NSString* temp = [self func1];
[temp release];
}
所以现在我有两个释放内存的版本,这与我在大多数博客上读到的上面的句子“分配的数量必须等于释放的数量”相矛盾。
我对上述内容有点困惑。因为如果我在第一个函数中自动释放字符串并想在第二个函数中长时间使用字符串,如果释放池在两者之间被刷新怎么办,另一方面如果我不使用自动释放它仍然会阻塞内存.
那么正确的做法是什么。
【问题讨论】:
标签: iphone objective-c