说我有一个没有物理支持的财产。也就是说,它没有内部指针。一个示例setter和getter将是:
- (void)setImage:(UIImage*)image
{
self.imageView.image = image;
[self setNeedsLayout];
}
- (UIImage*)image
{
return self.imageView.image;
}
如何在头文件中声明该属性,以便向其他同事说明此属性没有物理支持?
@property(nonatomic, ????) UIImage* image;
我知道如果我使用copy,assign或strong,它没有任何区别,我的代码仍然有效。但其他人阅读代码并不清楚我的意图是什么。
答案 0 :(得分:1)
我会说strong
,因为imageView内部有一个strong
链接到其图像:
@interface UIImageView : UIView
[...]
@property(nonatomic,retain) UIImage *image;
[...]
@end
答案 1 :(得分:0)
此类的客户没有理由知道 - 事实上,不应该关心 - 该类如何存储其任何数据。
他们应该像处理任何其他财产一样处理这个属性,无论它是否真的有一个支持ivar。他们需要知道的是如何获取和设置它,以及在设置属性时该类是否将获得所有权。
在这种情况下,类与图像具有(间接)所有者关系,因此strong
是所有权说明符中的正确选择。
@property (strong, nonatomic) UIImage * image;
答案 2 :(得分:0)
您只能将其声明为readonly
或readwrite
。如果你从不使用它,编译器不会为它生成实例变量(存储)。另请参阅How can I declare a @property but prevent its ivar from being created?(并查看Apple's doc here并滚动到"您可以实现自定义访问器方法")如果您确实要指定保留类型,则通常会保留对象 - 确实是你的 - 所以"强大"很好,虽然它会被编译器忽略(你已经看过了,因为它们中的任何一个都是一样的)。
从设计角度来说,向班级用户表明没有存储"为了它。他们为什么要关心,或者表现得与众不同?在对象的外部,它应该看起来像任何其他属性,无论它是如何派生的。