声明的差异

时间:2013-06-01 20:23:27

标签: objective-c

@interface QuickViewControllViewController : UIViewController<UIScrollViewDelegate>{
IBOutlet UIWebView *myWebView;
UIScrollView *scrollView;

IBOutlet UIImageView *imagePreview;
UIImage *source;

}

@end

如果我不希望它们暴露在课堂外,这些声明和以@property开头的声明之间有什么区别?当您从故事板中拖动它们时,Xcode会自动使它们成为@properties。我宁愿不使用@property,所​​以我不必使用self。我最好不要制作它们的属性吗?

由于

3 个答案:

答案 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