gpt4 book ai didi

objective-c - 在 Cocoa 中声明对象时,我应该将它们设置为 nil 吗?

转载 作者:搜寻专家 更新时间:2023-10-30 19:55:57 24 4
gpt4 key购买 nike

假设我想创建一个 NSString 的实例,它根据另一个变量的值被初始化为某个值。通常情况下,我会这样做

NSString *string;
if(foo == 1)
string = @"Foo is one.";
else
string = @"Foo is not one.";

但是,在我看到的一些示例代码中,我看到人们这样做

NSString *string = nil;
if(foo == 1)
string = @"Foo is one.";
else
string = @"Foo is not one.";

这两种方法有什么区别,哪种方法更受青睐?

最佳答案

我个人的偏好是立即初始化任何变量。但是,在您提供的示例中,这两种方法是等效的。

C 语言中(即 CC++Obj-C)没有立即初始化的变量可能包含随机垃圾值。在变量初始化之前使用它会导致意外行为(从希望崩溃到获得意外行为)。

例子考虑以下示例:

int abs;
if (argument > 0) abs = argument;
else if (argument < 0) abs = -1 * argument;
NSLog(@"%i", abs);

如果 argument 为 0,代码会保留 abs 变量未初始化。因此您将记录随机值,然后导致程序其余部分中的值被破坏;而且很难发现问题出在哪里!

如果您使用未初始化的引用,您很可能会得到一个 EXC_BAD_ACCESS

关于objective-c - 在 Cocoa 中声明对象时,我应该将它们设置为 nil 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1262444/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com