在Objective-C中,从集合中检索对象时(例如,使用-[NSArray objectAtIndex:]
),何时需要将对象强制转换为其原始类,以及为什么?
似乎在调用方法时,不需要强制转换,但是在使用属性点表示法时。但我不明白为什么会这样。
答案 0 :(得分:4)
由于一个简单的事情,你需要在使用点表示法时强制转换它:否则编译器将其视为struct objc_object { Class isa; } *
,它没有得到你想要的成员。 (事实上,要访问isa
,您还需要->
- 符号。)
这基本上是因为-[NSArray objectAtIndex:]
返回id
,其定义为:
typedef struct objc_object { Class isa; } *id;
你需要强制转换才能使用点表示法,但是你不需要将它强制转发给它。我的方法:总是强制转换。 :)