@interface QuickViewControllViewController : UIViewController<UIScrollViewDelegate>{
IBOutlet UIWebView *myWebView;
UIScrollView *scrollView;
IBOutlet UIImageView *imagePreview;
UIImage *source;
}
@end
如果我不希望它们暴露在课堂外,这些声明和以@property开头的声明之间有什么区别?当您从故事板中拖动它们时,Xcode会自动使它们成为@properties。我宁愿不使用@property,所以我不必使用self。我最好不要制作它们的属性吗?
由于
答案 0 :(得分:1)
当您命令拖动它们时,Xcode会自动使它们成为@properties 来自故事板
这不是真的,如果你想创建不属于xib / storyboard属性的类成员,那么拖动命令拖动到.h文件的{}
部分,这样他们就不会了声明为属性。
@interface QuickViewControllViewController : UIViewController<UIScrollViewDelegate>{
// drag here the line from xib/storyboard for instance members and not properties
}
现在,当您想要访问类之外的成员(例如instance.property
)以及声明系统将自动生成setter和getter的所有属性时,将使用属性,这对于其他类成员不会发生。
所以在你的情况下,如果你想只有你班级中可见的班级成员,你可以使用你发布的代码,在我看来,如果你的班级成员只在一个班级中可见,最好不要使用属性。 / p>
作为一个注释,您也可以为此案例声明私有属性,但是有点无用。
答案 1 :(得分:0)
@property
使它成为一个属性,而另一个使它成为一个实例变量,它只是在类中无法访问。如果你不需要在类之外对它进行任何访问,那么去声明实例变量是好的。 / p>
当您通过xcode创建插座时,xcode使其成为一个属性,换句话说,属性应该是这样做的。您可以在代码中编写然后通过右键单击对象来设置它IB并将出口拖到文件所有者
答案 2 :(得分:0)
将它们设为@property
绝对是使用self
以及getter和setter的最佳做法。如果您想减少曝光,请在.m
文件中尝试此操作。
@interface QuickViewControllViewController()
@property (nonatomic, weak) IBOutlet UIWebView *myWebView;
@property (nonatomic, strong) UIScrollView *scrollView;
@property (nonatomic, weak) IBOutlet UIImageView *imagePreview;
@property (nonatomic, strong) UIImage *source;
@end
如果你真的想直接使用ivars,你仍然可以这样做_source
和_myWebView