gpt4 book ai didi

iphone sqlite 内存泄漏 [NSString stringWithUTF8String :(char*)sqlite3_column_text

转载 作者:行者123 更新时间:2023-12-03 19:14:53 35 4
gpt4 key购买 nike

当我分配从数据库检索到的值时,我不断从该 sql 语句中收到内存泄漏指示...

Person *tmpPerson = [[Person alloc] init];

tmpPerson.personName = [NSString stringWithUTF8String: (char*)sqlite3_column_text(SelectPersonStmt, 0)];
tmpPerson.personEmail = [NSString stringWithUTF8String: (char*)sqlite3_column_text(SelectPersonStmt, 1)];

[personList addObject:tmpPerson];
[tmpPerson release];

但是,如果我将 nsobject 类对象 ...tmpPerson 替换为常规 NSString 的 ...leaks 就不会再提示了吗?有谁知道为什么吗?

NSString * personName = [NSString stringWithUTF8String:(char*)sqlite3_column_text(SelectPersonStmt, 0)];
NSString * personEmail = [NSString stringWithUTF8String:(char*)sqlite3_column_text(SelectPersonStmt, 1)];

这是我的类定义...有什么问题吗?

@interface Person : NSObject {

NSString* personName;
NSString* personMobile;
NSString* personEmail;

}

@property (nonatomic, retain) NSString* personName, *personEmail, *personMobile;

- (id)init
{
if ((self = [super init])) {
personName = [NSString string];
personEmail = [NSString string];
personMobile = [NSString string];
}
return self;
}

我在这里遗漏了什么吗?我是否应该初始化这些字符串,它似乎没有任何区别?我把它们放在那里,以防我想用一些默认值初始化它们。

在通过仪器对此进行测试时,我注意到在释放方法期间触发了内存泄漏。我试过了,但也没有帮助

-(void) dealloc

{
personName = nil;
personEmail = nil;
[super dealloc];
}

任何帮助将不胜感激。我看过很多与此相关的帖子,但我不确定人们是否有我提到的相同行为。

最佳答案

你必须在dealloc中释放你的ivar:

-(void) dealloc
{
[personName release];
[personEmail release];
[personMobile release];
personName = nil; // Optionnal
personEmail = nil; // Optionnal
personMobile = nil; // Optionnal
[super dealloc];
}

关于iphone sqlite 内存泄漏 [NSString stringWithUTF8String :(char*)sqlite3_column_text,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4104292/

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