【发布时间】:2016-04-09 23:59:57
【问题描述】:
看起来通过点表示法与 setter 设置属性之间存在一些细微差别。
在我的 Objective-C 代码中,我有一个属性可以设置为 A 类或 B 类的实例。所以我将其声明为 @property id delegate
A 类和 B 类具有相同的属性和方法。如果您在一个与另一个上调用methodM1,只是实现(功能)不同。
我看到以下行不起作用(通过点符号直接使用属性)
self.delegate = [[Class A alloc] init];
self.delegate.property1 = @"ABCD" ; //Does not work, get an error that property1 not defined on id
但以下行有效
[self.delegate setPropert1:@"ABCD"] ; //works
有什么区别?是不是在 setter 的情况下,它知道有一个类响应 setProperty1 方法,所以编译器允许它?如果是,看起来下面对 Q 的答案(这也是我最初的理解)是不正确的。即点符号不会被 setter 替换。
Difference between setting a property directly and using its setter?
【问题讨论】:
-
关于您的最后一段和链接的问题 - 只要发件人不是
id类型,其他问题中的答案就是完全正确的。
标签: objective-c inheritance setter