【发布时间】:2013-03-25 20:07:21
【问题描述】:
非零、非空 NSStrings 返回零长度的奇怪之处。这是我设置字符串的方式。
// property is declared like so in .h
@property (strong, nonatomic) NSString *myStringValue;
// synthesized like so in .m
@synthesize myStringValue;
// most times property is set directly like so (.m)<br />
// ...
self.myStringValue = @"Some Value";
// ...
// property is (sometimes) set like so (.m)<br />
// copied from another vc
// ...
self.myStringValue = anotherObj.myStringValue;
// ...
零长度
当通过从另一个对象(后一种情况)分配属性来设置属性并稍后在代码中的某个位置使用时,[self.myStringValue length] 返回 0,即使使用调试器的鼠标悬停显示摘要将文本正确地显示为“某些值”。
NSString 优化?
This blog 讨论了当内存中存在多个包含相同字符串的 NSString 对象时可能发生的 NSString 优化。我想知道这是否与它有关。由于 NSString 是作为类集群实现的,并且 NSString 对象可以在后台转换为任意数量的相关私有类(*__NSCFString,__NSCFStringConstant*)以进行优化,如果这些中的任何一个,也许这就是导致我的问题的原因对于长度消息,类碰巧返回零......
想法?
【问题讨论】:
-
我认为这只是调试器的错误之一。在调试器中尝试
p (int)[self.myStringValue length],它应该会给你实际值 -
内部对象被设计成行为相同,因此您永远不知道您使用的是哪个对象。他们都没有用长度做愚蠢的事情。您必须提供更多详细信息;你能提供一个最小的完整例子吗?您设置的值是否以任何方式特殊(可能以空字符开头?)您是否尝试过记录字符串的值和长度(而不是简单地使用调试器)?
标签: objective-c c xcode nsstring