gpt4 book ai didi

cocoa - NSString 赋值和保留

转载 作者:行者123 更新时间:2023-12-03 17:17:12 25 4
gpt4 key购买 nike

关于 NSStrings 的一个简单问题,我有一段代码为字符串分配一个值,根据发现的内容,它要么通过 substringToIndex 分配值,要么通过常量字符串 @"0.00"分配值,可以吗使用

// Save if value found, otherwise set to 0.00
if (parsedCharacters == nil || [parsedCharacters isEqualToString:@""])
self.currentDiscountedPrice = @"0.00";
else
{
// Truncate extra digits from string to 2 decimal places (find full stop, save 2 places after it)
NSRange fullStopRange = [parsedCharacters rangeOfString:@"."];
self.currentDiscountedPrice = [parsedCharacters substringToIndex:(fullStopRange.location + 3)];
}

对于分配,因为它将释放旧值并保留新值?

无法知道在上一次迭代中 var 是否被分配了常量字符串或 substringToIndex 返回值,但我被告知对常量字符串调用保留和释放是无害的,这是真的吗?

最佳答案

NSString 并不特殊;所有 Cocoa 对象都遵循 the Cocoa memory-management rules 。只要你也这样做,你就会没事的。

I was told calling retain & release on constant strings is harmless, is this true?

是的。您应该像对待您不拥有的任何其他字符串一样对待它们:如果您想拥有它,则保留它,或者制作一个副本并拥有它;然后一定要释放你拥有的东西。

… should I rather explicitly release the old value & retain the substringToIndex value or it okay to just use self.currentDiscountedPrice = for both assignments?

您应该在除 init 方法和 dealloc 之外的任何地方使用该属性。这些是唯一应该显式向实例变量中的对象发送 retainrelease 消息的方法。

该段落两边的原因是您或子类可以为属性实现自定义访问器。在半初始化或半解除锁定的对象上运行自定义行为可能很危险,但您可能希望在其他地方都使用它。

将常量字符串对象传递给属性 setter 没有什么坏处。它将照常保留或复制对象。

注意,当属性的值是具有可变变体的类的对象时(如 NSString 具有 NSMutableString),您应该将该属性声明为复制其值 (@property(copy)@property(nonatomic, copy)),这样您就不会拥有其他人的可变对象的共同所有权。如果它们改变对象,这可能会给您带来问题,特别是如果您将对象存储在哈希集合(例如字典键)而不是实例变量中。

关于cocoa - NSString 赋值和保留,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3438572/

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