讨论id的stringValue函数的功能?

时间:2013-02-08 16:26:33

标签: objective-c nsmutablearray

我有一个带有int值的NSMutableArray对象 我可以通过以下方式获得一定的价值:

int *v0=[[[arrayObj objectAtIndex:0] intValue];

没有问题。

但是 我有一个带有NSString值的NSMutableArray对象 我无法通过以下方式获得某种价值:

NSString *v0=[[[arrayObj objectAtIndex:0] stringValue];
//raises error

我想学习并准确理解stringValue for ... 以及为什么会出现此错误?

NSString * v0 = [arrayObj objectAtIndex:0]; 按预期工作。我asusme它的某种指针与null终止,所以它可以leech值。 我不确定这行也是unicode / encoded字符串安全代码。

总结:
想知道stringValue的用途是什么行o代码片段

2 个答案:

答案 0 :(得分:1)

您将收到的错误(但未提交您的问题)将未知选择器发送到实例,这是因为NSString没有{{1}方法。

您建议的方法是正确的:

stringValue

编辑(由@ An​​swerbot的回答提示):

您感到困惑的原因是NSString *v0 = [arrayObj objectAtIndex:0]; 用于将字符串值转换为整数,只要字符串表示整数(即[NSString intValue])。但是,对于字符串,您不需要这个,因为该对象已经是一个字符串。因此没有提供。

答案 1 :(得分:1)

  

我有一个带有int值的NSMutableArray对象

这是不可能的,Cocoa数组总是包含对象。您可能有一个包含整数的NSNumber个对象数组,如:

NSArray *arrayOfNumbers = @[@1, @2, @3];

NSNumber个对象有一个intValue方法,因此可行:

int value = [arrayOfNumbers[0] intValue];

另一方面,如果你有一个字符串数组......

NSArray *arrayOfStrings = @[@"1", @"2", @"3"];

...您希望直接访问单个元素,而无需将字符串对象转换为其他元素:

NSString *element = arrayOfStrings[0];

NSString个对象无法理解stringValue方法:

[arrayOfStrings[0] stringValue]; // crash: does not recognize selector

回到开头,第一个数组中的NSNumber个对象确实理解stringValue。您可以使用它将数字转换为字符串:

NSString *intString = [arrayOfNumbers[0] stringValue];

为了使混淆更加完美,NSString 了解intValue消息:

int value = [arrayOfStrings[0] intValue];

此处intValue表示尝试将字符串转换为普通的C int值。