gpt4 book ai didi

objective-c - 使用 [NSString stringWithString : @"some string"] versus @"some string" 的优缺点

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:49:25 26 4
gpt4 key购买 nike

我想比较以下简单的作业:

...
@property(nonatomic,retain) UITextField *textField;
...

self.textField.text = @"some string";
self.textField.text = [NSString stringWithString:@"some string"];
self.textField.text = [NSString stringWithFormat:@"some string"];

其中 textField 是一个 UITextFieldtext 属性是一个 NSString。当然,它们都可以工作。我知道最后两个在使用参数时的区别。但是假设我们只对这种用法感兴趣。

问题:

  1. 对于做这种作业,为什么我不应该总是使用第一个?
  2. 比较最后两者,这两者的编译和/或运行时有什么不同吗?如果不使用,我为什么要使用 stringWithString:

最佳答案

始终尝试做感觉自然的事情。如果你要分配一个常量字符串,那么就这样做,即第一个选项。 @"..." 字符串是非常高效的常量,不需要进行内存管理,因此在有意义的情况下使用它们。

NSLog(@"%p", @"XX");
NSLog(@"%p", @"XX");
NSLog(@"%p", @"XX");

结果:

0xa2424
0xa2424
0xa2424

即它们在内存中都是同一个对象。

NSLog(@"%p", [NSString stringWithString:@"XX"]);
NSLog(@"%p", @"XX");
NSLog(@"%p", [NSString stringWithString:@"XX"]);

还导致:

0xa2424
0xa2424
0xa2424

从这里可以看出,这两个对象之间没有区别,因此使用 -stringWithString: 只是要发送的额外消息。话虽如此,开销通常不足以产生影响,因此无论哪种方式都应该没什么大不了的。我个人会选择方法一,因为使用方法二没有任何好处,它只是额外的代码。

但是,

NSLog(@"%p", [NSString stringWithFormat:@"XX"]);
NSLog(@"%p", [NSString stringWithFormat:@"XX"]);
NSLog(@"%p", [NSString stringWithFormat:@"XX"]);

结果:

0x7f86730
0xf8479b0
0x8a4cdb0

如您所见,每次都会创建一个新字符串,因为您提供的字符串只是用于处理以下替换变量的格式字符串,因为您没有避免 stringWithFormat: 除非你需要它。

(显然所有地址都是示例...)

关于objective-c - 使用 [NSString stringWithString : @"some string"] versus @"some string" 的优缺点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8275131/

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