NSString任务和保留
题
只是关于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
. 。这些是唯一应该明确发送的方法 retain
和 release
在实例变量中给对象的消息。
该段的双方的原因是您或子类可以实现该物业的自定义访问者。自定义行为可能是在半定位或半锁定的物体上运行的危险,但是您可能会在其他任何地方都想要它。
将恒定对象传递给属性设置器没有危害。它将保留或复制对象正常。
在这一点上,当属性的值是具有可变变体的类的对象(由于NSString具有NSMutableString)时,您应将属性声明为复制其值(@property(copy)
或者 @property(nonatomic, copy)
),为了使您不要共同拥有别人的可变对象。如果它们突变对象,这可能会给您带来问题,尤其是如果您将对象存储在哈希集合中(例如字典键)而不是在实例变量中。