【问题标题】:iphone sqlite memory leak with [NSString stringWithUTF8String:(char*)sqlite3_column_textiphone sqlite内存泄漏与[NSString stringWithUTF8String:(char*)sqlite3_column_text
【发布时间】:2011-05-05 11:51:37
【问题描述】:

当我分配从数据库中检索的值时,我不断从这个 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];
}

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

【问题讨论】:

    标签: iphone sqlite memory memory-leaks


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      您应该释放 Person 结构中使用的字符串,而不是将其设置为 NULL。 一旦你将它设置为 NULL 并且没有其他对象引用它,你就有泄漏,系统不知道如何回收它。

      编辑:该死,我的回答迟到了 10 秒:P

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-10-31
        • 1970-01-01
        相关资源
        最近更新 更多