2011-09-28 64 views
0

我有一个内存管理问题我无法在iOS上找到我的头。我从SQLite数据库获取数据,其中一些单元格可能为空。因此,为了处理这种情况,我将[NSNull空]我的收件人如果为空,或者值如果不是:发布可以是[NSNull null]或不是的对象

NSString *email = (const char *) sqlite3_column_text(statement, 6) == NULL ? [NSNull null] : [[NSString alloc] initWithUTF8String:(const char *) sqlite3_column_text(statement, 6)]; 

但后来如果我这样做:

[email release]; 

分析仪不喜欢它,我认为当对象实际上是[NSNull null]时,它会崩溃我的程序。

所以我已经试过:

(id) email == [NSNull null] ? nil:[email release]; 

但它不工作(仍然崩溃和分析仪不喜欢它)。有任何想法吗?

在此先感谢

回答

0

我使用的是在这种情况下nil值。例如:

NSString *email = (const char *) sqlite3_column_text(statement, 6) == NULL ? nil : [[NSString alloc] initWithUTF8String:(const char *) sqlite3_column_text(statement, 6)]; 

在这种情况下,你可以安全地调用[email release]; // email can be NSString or nil,所有工作将根据您的需要。

+0

谢谢,零确实可以释放。然而,我发现你可以告诉SQLite将什么值放入一个空单元格,所以我只是选择了一个空字符串而不是C NULL。节省我一些代码! – chopchop

相关问题