gpt4 book ai didi

iphone - 调用 [myStringrelease] 不会减少 [myStringretainCount]

转载 作者:行者123 更新时间:2023-12-03 20:19:47 26 4
gpt4 key购买 nike

我遇到以下情况,这似乎导致我的 iPad 应用程序泄漏内存。

我有一个带有字符串属性的类...

@property(nonatomic,retain) NSString * synopsis;

我从一些 HTTP 响应(JSON 或 XML 响应)设置字符串属性。

此时概要对象的保留计数为 1。

但是我有这样的情况:

我将概要保存到本地 sqlite 数据库,然后我想从内存中释放它,但我遇到了奇怪的情况,从我的对象中调用 [synopsis release] 不会递减保留计数为 0。

(void) save
{
NSLog(@"synopsis before save retainCount=%d",[synopsis retainCount]);
[self saveToDb:synopsis withKey:@"synopsis"];
NSLog(@"synopsis after save retainCount=%d",[synopsis retainCount]);
[synopsis release];
NSLog(@"synopsis after release retainCount=%d",[synopsis retainCount]);
synopsis=nil;
}

在控制台中我得到:

synopsis before save retainCount=1

synopsis after save retainCount=1

synopsis after release retainCount=1

这怎么可能?我在模拟器或设备上运行时得到相同的结果。

最佳答案

不要依赖RETAINCOUNT!

对于人类来说,这并不是对象所有权的准确衡量标准。您不知道框架中的幕后调用 retainrelease 的内容。

Cocoa 中的内存管理很简单:

  1. 如果您alloc/initcopy一个对象,请确保在某个时间对其调用release点。
  2. 如果您想保留某个对象,请调用 retain ——但也要确保在某个时刻调用 release

关于iphone - 调用 [myStringrelease] 不会减少 [myStringretainCount],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3213647/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com