我希望能够写
id foo = [MyObject new];
foo.bar = [NSObject new];
但是我收到以下错误:
/blah/blah/blah/Blah.m:32:9: error: property 'bar' not found on object of type '__strong id'
foo.bar = [NSObject new];
^
1 error generated.
由于clang没有报告我可以压制的警告,我认为这种行为是永久性的,但我希望有人可以告诉我。
显然,我知道这会在默认情况下中断,但我打算使用Dynamic Method Resolution来使其正常工作。
答案 0 :(得分:3)
您不能在像这样的通用对象指针上使用点语法。
原因是编译器会将foo.bar = baz;
重写为[foo setBar:baz]
,但由于您可以更改设置者的名称@property (strong, nonatomic, setter=setListOfApples:) NSArray * listOfOranges;
,因此必须才能看到财产声明。
如果您使用标准消息发送语法,这将起作用。换句话说,您必须告诉编译器对象的确切类型,以便它可以查找属性的setter,或者告诉它您希望它使用的确切setter名称。
答案 1 :(得分:-2)
@dynamic会照顾它吗?
@dynamic foo; @dynamic bar;