gpt4 book ai didi

objective-c - Objective-c 中的 const 关键字

转载 作者:行者123 更新时间:2023-12-04 02:29:49 25 4
gpt4 key购买 nike

 int main(int argc, char *argv[]) {         
@autoreleasepool {
const int x = 1;
const NSMutableArray *array1 = [NSMutableArray array];
const NSMutableString *str1 = @"1";
NSString * const str2 = @"2";

// x = 2; compile error
[array1 addObject:@"2"]; // ok
// [str1 appendString:@"2"]; // runtime error
// Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Attempt to mutate immutable object with appendString:'
// str2 = @"3"; compile error
}
}

我的问题是为什么 array1 addObject 是合法的,为什么 str1 appendString 被禁止?

看到这个打击:

NSMutableString *f2(const NSMutableString * const x) {
[x appendString: @" world!"];
return x;
}

int main(int argc, char *argv[]) {
@autoreleasepool {
NSMutableString *x = [@"Hello" mutableCopy];
NSLog(@"%@", f2(x));
}
return 0;
}

以及为什么这段代码是合法的,我怎样才能像在 C++ 中那样使用“const”关键字使对象不可变?

==========================================@看https://softwareengineering.stackexchange.com/questions/151463/do-people-use-const-a-lot-when-programming-in-objective-c

最佳答案

问题在于,尽管您将 str1 声明为 NSMutableString 的实例,但它实际上是 NSString 的不同子类的实例>--特别是,默认情况下它是 __NSCFConstantString 的一个实例,尽管 this class can be changed by setting a compiler flag .这是从 @"" 返回的字符串类型。

要解决这个问题,只需使用

const NSMutableString *str1 = [NSMutableString stringWithFormat:@"1"];

关于objective-c - Objective-c 中的 const 关键字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13126152/

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