Objective c 对自定义类使用点表示法

Objective c 对自定义类使用点表示法,objective-c,Objective C,我一直在想这件事 我有一个名为hitCounter的@属性,它可以正常工作: 如果([[someArray objectAtIndex:i]hitCounter]!=0)继续 没问题,它能用。没有我编写的getter方法hitCounter;它之所以存在是因为@synthesis对吗 然而,属性应该允许点表示法。即使属性存在、已合成且已导入此数组中对象的类标头,也不会编译以下两项: 如果([someArray objectAtIndex:i].hitCounter!=0)继续 或 如果((MyC

我一直在想这件事

我有一个名为hitCounter的
@属性,它可以正常工作:

如果([[someArray objectAtIndex:i]hitCounter]!=0)继续

没问题,它能用。没有我编写的getter方法
hitCounter
;它之所以存在是因为
@synthesis
对吗

然而,属性应该允许点表示法。即使属性存在、已合成且已导入此数组中对象的类标头,也不会编译以下两项:

如果([someArray objectAtIndex:i].hitCounter!=0)继续

如果((MyClass*)[someArray objectAtIndex:i].hitCounter!=0)继续

编译器说在id类型的对象上找不到
属性hitCounter,但很明显,我正在将其强制转换为
MyClass
,因此它不应该再是id类型--
id
--这是怎么回事?

您应该将
(MyClass*)[someArray ObjectatinIndex:I]
放在括号内:

if (((MyClass*)[someArray objectAtIndex:i]).hitCounter!=0) continue;
您应该将
(MyClass*)[someArray objectAtIndex:i]
放在括号内:

if (((MyClass*)[someArray objectAtIndex:i]).hitCounter!=0) continue;
编译器说在id类型的对象上找不到属性hitCounter 但很明显,我是在向我的班级播送它,所以它不应该再是类型了 这是怎么回事

这只是一个运算符优先级问题。您正在将整个表达式的结果强制转换为
[someArray objectAtIndex:i].hitCounter
MyClass*
,但您希望强制转换仅应用于
[someArray objectAtIndex:i]
。使用括号纠正这种情况,如sch的回答所示

编译器说在id类型的对象上找不到属性hitCounter 但很明显,我是在向我的班级播送它,所以它不应该再是类型了 这是怎么回事

这只是一个运算符优先级问题。您正在将整个表达式的结果强制转换为
[someArray objectAtIndex:i].hitCounter
MyClass*
,但您希望强制转换仅应用于
[someArray objectAtIndex:i]
。使用括号纠正这种情况,如sch的回答所示