【问题标题】:Objective-C uninitialized pointers vs null pointersObjective-C 未初始化指针与空指针
【发布时间】:2009-10-24 21:14:51
【问题描述】:

也许我的记忆已经完全古怪了,但我想我记得声明指针而不初始化它们会使它们指向 nil。但最近似乎并非如此。一直都是这样吗?还是和编译器设置有关?

【问题讨论】:

  • 我认为只有静态“字段”被初始化为nil。局部变量将指向垃圾。我认为情况一直如此。你还记得任何细节吗?

标签: objective-c pointers null


【解决方案1】:

对象的实例变量在alloc中初始化为nil(整个对象被置零)。

编辑: 此外,全局和静态存储变量初始化为零(C99 Standard 的 6.7.8 10,感谢 Derek 指出)。

本地堆栈变量不会自动初始化。这在已知的历史中没有改变。

【讨论】:

  • 其实,全局变量和静态变量总是被初始化的。
  • 真的吗?以下代码在没有断言的情况下运行,这表明它们在声明时被初始化为nil,但在调用 alloc 时变为非 nil:NSString* foo; assert(foo==nil); foo = [NSString alloc]; assert(foo!=nil); foo = [foo init]; assert(foo!=nil);
  • 啊哈 - 我已经意识到你的意思是实例变量被初始化到 nil 当它们是成员的 object 是 alloc'd
【解决方案2】:

来自Transitioning to ARC Release Notes:

堆栈变量初始化为nil

使用 ARC,强、弱和自动释放堆栈变量现在隐式初始化为 nil。例如:

-(无效)我的方法{ NSString *名称; NSLog(@"name: %@", name); }

将记录 null 以获取 name 的值,而不是可能崩溃。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-04-10
    • 1970-01-01
    • 2015-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-09
    相关资源
    最近更新 更多