gpt4 book ai didi

ios - 在 objective-c 中定义 const NSString 对象时更好的做法是什么?

转载 作者:可可西里 更新时间:2023-11-01 03:51:39 29 4
gpt4 key购买 nike

当我阅读团队中同事的代码时,我通常会发现 const NSString 对象有两种不同类型的定义:

static NSString const *静态 NSString * const

据我所知,前者是一个指向const NSString对象的指针,后者定义了一个指向NSString对象的const指针。

我的问题是,在 objective-c 中定义 const NSString 对象时,哪种编程方式更好,哪种方式更受欢迎?

谢谢。

最佳答案

一般来说,

static NSString * const

是更好的选择。

实际上,static NSString const *static NSString * 是一样的,因为这里的字符串已经是不可变的了。 如果你深入分析,你会发现 const 与它完全没有关系,NSString 是 Objective-C 的类,它将实际值包装在 C 中。/p>

注意:NSString 本身就是常量类型(有一个NSMutableString 存在)。如果你想让它成为一个常量,你只需要为它定义一个常量指针。


编辑

static NSString * const var;       // 1
static NSString const * const var; // same to 1, first const is useless
static const NSString * const var; // same to 1, first const is useless

不能做任何修改。

static NSString * var;              // 2
static NSString const * var; // same to 2, the const is useless
static const NSString * var; // same to 2, the const is useless

不能修改 var 的值,但可以修改指针。

static NSMutableString * const var; // 3

可以修改var的值,但不能指针。

static NSMutableString * var; // 4

可以同时修改值和指针。


编辑 2

如@user3125367 所述,

Immutability in Objective-C terms has nothing to do with constness in C.
...
There are 3 orthogonal things: pointer constness, object field constness and object's high-level mutability.

我同意他的看法。 NSString 的级别更高(它也继承自 NSObject),其上的 const 实际上应该没有任何影响(与 “对不可变对象(immutable对象)无影响” 的含义不同)。 但编译器可能已经处理好了。

注意:

var = @"a";  
var = @"b";

上面的代码片段意味着指针改变了,而不是值。无法修改 NSString 实例的值(对于 NSMutableString,可以使用 -appendString: 等方法修改值)。

如果你使用

static NSString const * var;

最后的 var 将指向 @"b"。相反,如果您使用

static NSString * const var;

编译器会抛出一个错误,而这正是我们想要的:使 var 不可更改。

关于ios - 在 objective-c 中定义 const NSString 对象时更好的做法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30000641/

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