Objective c 目标C:强制转换从集合中检索的对象

Objective c 目标C:强制转换从集合中检索的对象,objective-c,object,collections,casting,nsarray,Objective C,Object,Collections,Casting,Nsarray,在Objective-C中,当从集合中检索对象时(例如,使用-[NSArray objectAtIndex:),何时需要将对象强制转换为其原始类,以及为什么 调用方法时似乎不需要强制转换,但使用属性点表示法时就需要强制转换。但是我不明白这到底是为什么。使用点表示法时需要强制转换它,因为有一件事很简单:否则编译器会将其视为结构对象{Class isa;}*,它没有您想要获得的成员。(事实上,要访问isa,您仍然需要->-符号。) 这主要是因为-[NSArray objectAtIndex:返回id

在Objective-C中,当从集合中检索对象时(例如,使用
-[NSArray objectAtIndex:
),何时需要将对象强制转换为其原始类,以及为什么


调用方法时似乎不需要强制转换,但使用属性点表示法时就需要强制转换。但是我不明白这到底是为什么。

使用点表示法时需要强制转换它,因为有一件事很简单:否则编译器会将其视为
结构对象{Class isa;}*
,它没有您想要获得的成员。(事实上,要访问
isa
,您仍然需要
->
-符号。)

这主要是因为
-[NSArray objectAtIndex:
返回
id
,其定义如下:

typedef struct objc_object { Class isa; } *id;

使用点表示法需要强制转换,但向其发送消息时不需要强制转换。我的方法:始终强制转换。)

使用点表示法时需要强制转换它,因为有一件事很简单:否则编译器将其视为
struct objc_对象{Class isa;}*
,它没有您想要获得的成员。(事实上,要访问
isa
,您仍然需要
->
-符号。)

这主要是因为
-[NSArray objectAtIndex:
返回
id
,其定义如下:

typedef struct objc_object { Class isa; } *id;
使用点表示法需要强制转换,但向其发送消息时不需要强制转换。我的方法:始终强制转换。)