我想写
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使其正常工作。
最佳答案
您不能在像这样的通用对象指针上使用点语法。
原因是编译器将foo.bar = baz;
重写为[foo setBar:baz]
,但是由于可以更改 setter 的名称@property (strong, nonatomic, setter=setListOfApples:) NSArray * listOfOranges;
,因此它必须能够看到属性声明。
如果您使用标准消息发送语法,则可以使用。换句话说,您必须告诉编译器对象的确切类型,以便它可以查找属性的 setter ,或者告诉它要使用的确切 setter 名称。
关于objective-c - 如何使Objective-C编译器假定未声明的属性是动态的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12712535/