【问题标题】:Releasing an object that can be [NSNull null] or not释放一个可以是 [NSNull null] 的对象
【发布时间】:2011-09-28 06:16:27
【问题描述】:

我有一个内存管理问题,我无法在 iOS 上解决问题。我从 SQLite 数据库中获取数据,其中一些单元格可以为空。因此,为了处理这种情况,如果为空,我将 [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];

但它不起作用(仍然崩溃并且分析器不喜欢它)。有什么想法吗?

提前致谢

【问题讨论】:

    标签: ios memory-management null crash


    【解决方案1】:

    我在这种情况下使用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,一切都会按照您的需要进行。

    【讨论】:

    • 谢谢,nil 确实可以释放。但是我发现你可以告诉 SQLite 在空单元格中放入什么值,所以我只是选择放入一个空字符串而不是 C NULL。为我节省了一些代码!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-15
    • 2014-11-26
    • 1970-01-01
    • 2011-04-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多