objective-c - 将变量初始化为 nil 是一种好习惯吗?

标签 objective-c ios null clang-static-analyzer

将变量初始化为 nil 是好习惯吗?

我问这个是因为当我在我的项目上运行分析器时,我收到了警告。

 NSString *q;

    if(sqlite3_prepare_v2(database, [query UTF8String], -1, &statement, nil) == SQLITE_OK)
    {
        sqlite3_step(statement);
        selectedQuestion =[NSString stringWithFormat: @"%s",(char *)sqlite3_column_text(statement, 0)];
        sqlite3_finalize(statement);
    }

    sqlite3_close(database);

    return q; //Undefined or garbage value returned to caller

当我更改代码时,警告消失了:

NSString *q = nil;

最佳答案

如果您使用的是 ARC,那么您的指针将自动分配给 nil。但是,我不相信您使用的是 ARC,在这种情况下,指针将具有垃圾值。这是危险的,因为调用该函数的任何人都可以收到结果并相信指针指向有效的东西,因为它不等于 nil。

所以...是的,始终将您的指针初始化为 nil 或有效值。

示例 1::不需要首先分配给 nil 的好示例:

UIViewController *myVC = [[[UIViewController] alloc] init] autorelease];

示例 2::不需要首先分配给 nil 的错误示例:

UIViewController *myVC = nil;  // dumb since next line assigns it to valid value
myVC = [[[UIViewController] alloc] init] autorelease];

示例 3::分配给 nil 的好示例,因为它将有条件地获取新值

UIViewController *myVC = nil;  // :D
if (someCondition)
{
   myVC = [[[UIViewController] alloc] init] autorelease];
}
...

关于objective-c - 将变量初始化为 nil 是一种好习惯吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9215646/

相关文章:

ios - 获取对象 C 中 NSRadioButton 中选定的单元格

objective-c - 如何向 NSDate 添加时间间隔?

objective-c - 如何评论 Apple 对 Doxygen 的 block 扩展?

ios - Cocoapods init for ios 7。如何更新?

c# - 检查 null 时,泛型函数是否将值类型隐式转换为对象?

ios - 无法从 SQL 数据库检索查询

ios - 为什么VerificationController在didReceiveData内部崩溃

ios - 如何使用 Swift 将 CAShapeLayer 之外的所有内容设为黑色且不透明度为 50%?

java - 向 ArrayList 添加单个元素会另外添加 11 个空元素吗?

python - 如果另一列中的行满足条件则填充 nan