我在某处读到“property
实际上只是get / set方法,它不需要支持变量”。那是真的吗?
如果属性存储其值
答案 0 :(得分:1)
属性是方法声明。期。这就是为什么你可以在协议中使用它们。
但是Q的基础导致属性和合成,而不是协议:
如果没有连接的ivar,则通过在实现中合成属性来创建支持ivar。由于我们有自动合成,你没有看到合成。但它仍然存在。
所以,像这样的源代码
@interface MyClass : NSObject
@property id prop;
@end
@implementation MyClass
@end
默默地添加这样的东西。 (它不完全相同,但差不多。)
@interface MyClass : NSObject
@property id prop;
@end
@implementation MyClass
@synthesize prop;
@end
如果您手动实现声明属性的访问器,则可以检查:
@interface MyClass : NSObject
@property id prop;
@end
@implementation MyClass
- (id)prop { … };
- (void)setProp:(id)prop { … };
@end
在这种情况下,关闭自动合成并且没有声明ivar。
因此,如果ivars是 implementation 的问题,协议就无法声明它们。它们是一种接口定义。
答案 1 :(得分:-2)
当您将该协议实现为类的一部分时,该类将合成底层实例变量。正如您所知,该协议只是一个声明。