objective-c - 如何使Objective-C编译器假定未声明的属性是动态的?

标签 objective-c properties compiler-errors compiler-warnings

我想写

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/

相关文章:

ios - ios中stringByAppendingString和appendString的区别

ios - 从 SKScene 呈现 UIViewController

iphone - 随着 UISlider 值的更改,单元格未更新值

ios - 当专辑信息可用时,按专辑对歌曲数组进行排序

java - 将属性添加到属性占位符

scala 注释参数需要是常量,但最终的 val 没有成功

java - 优先队列实现堆

ios - Objective-C 中的 BOOL 数组

gradle - Gradle将SystemProperties传递给JUnit测试

java - 在调用另一个方法后调用方法时出现空指针异常?