【发布时间】:2014-03-21 08:10:03
【问题描述】:
我是objective-c 的新手。刚才在学习使用id,写了如下代码:
NSString *str = @"x";
id obj = str;
NSArray *arr = obj;
NSLog(@"%@, %@\n", str.className, arr.className);
在 Xcode 中执行,输出为__NSCFConstantString, __NSCFConstantString,没有任何警告。考虑到arr 最初被声明为NSArray,有人可以告诉我为什么会这样吗?
我也试过直接将arr赋值给str,如下:
NSString *str = @"x";
NSArray *arr = str;
NSLog(@"%@, %@\n", str.className, arr.className);
虽然在xcode中出现了警告,但是可以成功执行,输出还是一样的__NSCFConstantString, __NSCFConstantString。为什么?
我花了很长时间在互联网上搜索,但没有找到一个好的答案。请帮忙!谢谢!
【问题讨论】:
-
你能显示 s 变量的声明吗?
-
@Greg:这可能是复制/粘贴错误,应该是
str。 -
@Greg:抱歉打错了。我刚刚纠正了它
标签: objective-c casting dynamic-binding