只是关于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返回的值,但是我被告知在常量字符串上呼叫retain&Preake nonstant strings是无害的,这是真的吗?

有帮助吗?

解决方案

NSString并不特别。所有可可对象都遵循 可可内存管理规则. 。只要您也这样做,就会没事的。

有人告诉我在恒定字符串上呼叫保留和释放是无害的,这是真的吗?

是的。您应该将它们与您不拥有的任何其他字符串相同:如果要拥有它,则保留它,或者制作副本并拥有;然后确保发布您拥有的内容。

…我应该明确释放旧值并保留 substringToIndex 价值否则可以使用 self.currentDiscountedPrice = 对于这两个作业?

您应该在任何地方使用该物业 init 方法和 dealloc. 。这些是唯一应该明确发送的方法 retainrelease 在实例变量中给对象的消息。

该段的双方的原因是您或子类可以实现该物业的自定义访问者。自定义行为可能是在半定位或半锁定的物体上运行的危险,但是您可能会在其他任何地方都想要它。

将恒定对象传递给属性设置器没有危害。它将保留或复制对象正常。

在这一点上,当属性的值是具有可变变体的类的对象(由于NSString具有NSMutableString)时,您应将属性声明为复制其值(@property(copy) 或者 @property(nonatomic, copy)),为了使您不要共同拥有别人的可变对象。如果它们突变对象,这可能会给您带来问题,尤其是如果您将对象存储在哈希集合中(例如字典键)而不是在实例变量中。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top